将一个字符数组分配给另一个给出错误。 为什么?

数组的名称是指向第一个元素的指针。 那么为什么一个字符数组不能分配另一个数组呢?

#include int main() { char str1[]="Hello"; char str2[10]; char *s="Good Morning"; char *q; str2=str1; /* Error */ q=s; /* Works */ return 0; } 

表达式中的数组自动转换为指向数组第一个元素的指针,但sizeof运算符和一元&运算符的操作数除外,因此无法分配给数组。

#include 添加到代码的头部并使用strcpy()是复制字符串的好方法之一。

 #include #include int main(void) { char str1[]="Hello"; char str2[10]; char *s="Good Morning"; char *q; strcpy(str2, str1); /* Works */ q=s; /* Works */ return 0; } 

首先,数组的名称与指向第一个元素的指针不同。 在某些情况下,数组名称会衰减到指向第一个元素的指针,但通常它们不相同。

在那里遇到问题,数组名称不是可修改的左值,因此无法分配它们。

引用C11 ,Lvalues ,数组和函数指示符的章节§6.3.2.1

[…] 可修改的左值是一个左值,它没有数组类型,没有不完整的类型,没有const限定类型,如果它是结构或联合,则没有任何成员(包括,递归地,所有包含聚合或联合的任何成员或元素)具有const限定类型。

对于赋值运算符,LHS应该是可修改的左值。

引用C11 ,章节§6.5.16,

赋值运算符应具有可修改的左值作为其左操作数。

在你的情况下,

  str2=str1; 

str2不是可修改的左值。 因此,你得到错误。

FWIW,要复制内容,可以使用string.h头文件中的strcpy()