例如,
我这样声明变量,
char szBuffer[12] = {"Hello"};
char szData[12] = {"Cheese"};
szBuffer = szData;
是错误的,因为 szBuffer
不能是左值。
szBuffer
有自己的地址,比如0x0012345678
,szBuffer
的值也是它的地址,0x0012345678
.
所以我认为“数组名不能是左值”意味着数组的地址和它的值必须相等。
我说得对吗?
如果我是对的,为什么它们必须相等?
最佳答案
array name can't be l-value
这意味着数组不能用作左值或赋值运算符的左侧(不要与初始化混淆)。左值必须是可修改的。您可以修改数组的内容,但不能修改数组本身。
在 C
中你不能赋值给数组。尽管您可以初始化它们。
你应该使用 strcpy(szBuffer, szData)
或 memcpy(szBuffer, szData, 12)
.
此外,在字符串文字的初始化中也不需要 {}
。
如果您坚持使用operator =
,您需要将您的字符串放在一个结构中,因为在C
中允许复制结构对象。
例如:
struct string {
char name[12];
};
struct string szBuffer = {"Hello"};
struct string szData = {"Cheese"};
szBuffer = szData;
关于c - 数组名不能是左值是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35644341/