我很好奇为什么在C中不允许这样做:
char myarray[4];
myarray = "abc";
Run Code Online (Sandbox Code Playgroud)
这是允许的:
char myarray[4] = "abc";
Run Code Online (Sandbox Code Playgroud)
我知道在第一种情况下我应该使用strcpy:
char myarray[4];
strcpy(myarray, "abc");
Run Code Online (Sandbox Code Playgroud)
但是为什么不允许声明和后来的初始化,允许声明和同步初始化?它与C程序的内存映射有关吗?
谢谢!
Fré*_*idi 37
那是因为你的第一个代码片段没有执行初始化,而是分配:
char myarray[4] = "abc"; // Initialization.
myarray = "abc"; // Assignment.
Run Code Online (Sandbox Code Playgroud)
并且数组不能直接在C中分配.
该名称myarray实际上解析为其第一个元素(&myarray[0])的地址,该元素不是左值,因此不能作为赋值的目标.