在2D数组中,将直接字符串赋值给char数组,得到错误。
char name[5][10];
name[0] = "hello";
但是,使用strcpy
,将字符串复制到char数组工作正常。
char name[5][10];
strcpy(name[0],"hello");
为什么第一种情况不起作用?
答案 0 :(得分:2)
因为,数组类型不是可修改的左值,因此无法“分配”。
赋值运算符需要一个可修改的左值作为LHS操作数。
相关,引用C11
,章节§6.5.16
赋值运算符应具有可修改的左值作为其左操作数。
和,章节§6.3.2.1
[....]可修改的左值是一个左值 没有数组类型,没有不完整的类型,没有constqualified 类型,如果是结构或联合,则没有任何成员(包括, 递归地,所有包含聚合或联合的成员或元素)具有constqualified 类型。
在您的情况下,对于定义为
的数组char name[5][10];
元素name[0]
的类型为char [10]
,即10 char
s的数组。
答案 1 :(得分:1)
因为C不允许分配给数组。这是语言的限制。
请注意,您可以分配给struct
,即使包含数组:
#include <stdio.h>
struct x
{
char s[20];
};
int main(void)
{
struct x x;
x = (struct x){ "test" };
puts(x.s);
}