C中的Char数组声明和初始化

Ale*_*nov 21 c arrays char

我很好奇为什么在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])的地址,该元素不是左值,因此不能作为赋值的目标.