在二维数组中,将直接字符串分配给字符数组,得到错误。将直接字符串分配给C中的字符数组
char name[5][10];
name[0] = "hello";
但是,使用strcpy
,将字符串复制到字符数组工作正常。
char name[5][10];
strcpy(name[0],"hello");
为什么第一种情况不起作用?
在二维数组中,将直接字符串分配给字符数组,得到错误。将直接字符串分配给C中的字符数组
char name[5][10];
name[0] = "hello";
但是,使用strcpy
,将字符串复制到字符数组工作正常。
char name[5][10];
strcpy(name[0],"hello");
为什么第一种情况不起作用?
因为数组类型不是可修改的左值,因此不能被“分配”。
赋值运算符需要一个可修改的左值作为LHS操作数。
相关,报价C11
,章§6.5.16
赋值操作员有修改的左值作为其左操作数。
和,章§6.3.2.1
[....]一种修改的左值是一个左值即 不具有阵列型,不具有不完整的类型,不具有constqualified 类型,并且如果它是一个结构或联合,没有任何构件(包括, 递归,任何成员或所有的元件包含聚集体或联合)与constqualified 类型。
在你的情况下,对于数组定义像
char name[5][10];
元件name[0]
是char [10]
类型的,也就是10 char
秒的阵列。
可能有趣的是提及'strcpy'及其工作原理。也许那么OP会更清楚地理解为什么它会与'strcpy'一起工作,以及为什么它不适用于它的方法。 :) – Michi
@Michi很好,那会太多(太宽泛)。 OP已经声称知道为什么strcpy可以工作,但不能直接分配。 –
因为C不允许分配给一个数组。这是语言的一个限制。
请注意,您可以分配为struct
,即使包含数组:
#include <stdio.h>
struct x
{
char s[20];
};
int main(void)
{
struct x x;
x = (struct x){ "test" };
puts(x.s);
}
有无数这样的做题的。 – Michi
我们可以请一个更好的欺骗?这太过于倾向于C++。 –
那不是一个DUP – Michi