例如,
我声明这样的变量,
char szBuffer[12] = {"Hello"};
char szData[12] = {"Cheese"};
szBuffer = szData;
Run Code Online (Sandbox Code Playgroud)
是错误,因为szBuffer不能是l值.
szBuffer有它自己的地址,例如,0x0012345678和szBuffer的值也是它的地址,0x0012345678.
所以我认为"数组名称不能是l值"意味着数组的地址及其值必须相等.
我对吗?
如果我是对的,为什么他们必须平等?
数组名称不能是l值
这意味着数组不能用作赋值运算符的l值或左侧(不要与初始化混淆).l值必须是可修改的.您可以修改数组的内容,但不能修改数组本身.
在C您无法分配给数组.虽然你可以初学他们.
你应该使用strcpy(szBuffer, szData)或memcpy(szBuffer, szData, 12).
此外,不需要{}在字符串文字的初始化中.
如果您坚持使用operator =,则需要将字符串放在结构中,因为允许使用struct object copy C.
例如:
struct string {
char name[12];
};
struct string szBuffer = {"Hello"};
struct string szData = {"Cheese"};
szBuffer = szData;
Run Code Online (Sandbox Code Playgroud)