c - 数组名不能是左值是什么意思?

标签 c

例如,

我这样声明变量,

char szBuffer[12] = {"Hello"};
char szData[12] = {"Cheese"};

szBuffer = szData;

是错误的,因为 szBuffer 不能是左值。

szBuffer有自己的地址,比如0x0012345678szBuffer的值也是它的地址,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/

相关文章:

c - 如何返回数组中出现次数最多的最小值的整数?

c - 使用 rand() 在 C 中填充矩阵

c - 查找与手机键盘相关的字母组合的程序

c - 仅在使用 clang 10 编译时出现 strsep 之后的段错误

c - 为什么 gcc 中没有延迟

c - IP DSCP = 8 使IP总长度为7位数字

C动态内存/C字符串

c - 幂为-3/2或-5/2的c语言pow函数的实现

c - 在 C 中的复制字符串中获取空字符的最快方法

c - 内核虚拟内存结构是在进程即将执行时首先形成的吗?