在C语言中为字符数组分配直接字符串
在2D数组中,将直接字符串分配给char数组,会得到一个错误在C语言中为字符数组分配直接字符串,c,arrays,string,variable-assignment,C,Arrays,String,Variable Assignment,在2D数组中,将直接字符串分配给char数组,会得到一个错误 char name[5][10]; name[0] = "hello"; 但是,使用strcpy,将字符串复制到char数组可以正常工作 char name[5][10]; strcpy(name[0],"hello"); 为什么第一种情况不起作用?因为数组类型不是可修改的左值,因此不能“赋值” 赋值运算符需要一个可修改的左值作为LHS操作数 相关,引用章节§6.5.16中的C11 赋值运算符应具有可修改的左值作为其左操作数 以及
char name[5][10];
name[0] = "hello";
但是,使用strcpy,将字符串复制到char数组可以正常工作
char name[5][10];
strcpy(name[0],"hello");
为什么第一种情况不起作用?因为数组类型不是可修改的左值,因此不能“赋值” 赋值运算符需要一个可修改的左值作为LHS操作数 相关,引用章节§6.5.16中的
C11
赋值运算符应具有可修改的左值作为其左操作数
以及第§6.3.2.1章
[…]可修改左值是指
没有数组类型,没有不完整的类型,没有常量
类型,并且如果它是结构或联合体,则没有任何成员(包括,
递归地,所有包含的聚合或联合的任何成员或元素)具有常量
类型
在您的例子中,对于定义为
char name[5][10];
元素
name[0]
的类型为char[10]
,即10char
s的数组。,因为C不允许分配给数组。这是语言的局限性
请注意,可以分配给结构
,即使它包含一个数组:
#include <stdio.h>
struct x
{
char s[20];
};
int main(void)
{
struct x x;
x = (struct x){ "test" };
puts(x.s);
}
#包括
结构x
{
chars[20];
};
内部主(空)
{
结构x;
x=(结构x){“测试”};
看跌期权(x.s);
}
像这样的问题太多了。我们能不能再多问一次?这太倾向于C++了。DUP@Michi的确,但现在它已经关闭了,我正在考虑它,一定有一个…希望修复了dupe链接到合适的东西可能它会很有趣地提到strcpy
,以及它是如何工作的。然后,OP可能会更清楚地理解为什么它可以使用strcpy,为什么它不能使用它的方法@好吧,那太多了(太宽了)。OP已经声称知道为什么strcpy可以工作,但不能直接分配。