2017-08-22 97 views
-1

在二维数组中,将直接字符串分配给字符数组,得到错误。将直接字符串分配给C中的字符数组

char name[5][10]; 
name[0] = "hello"; 

但是,使用strcpy,将字符串复制到字符数组工作正常。

char name[5][10]; 
strcpy(name[0],"hello"); 

为什么第一种情况不起作用?

+3

有无数这样的做题的。 – Michi

+1

我们可以请一个更好的欺骗?这太过于倾向于C++。 –

+3

那不是一个DUP – Michi

回答

2

因为数组类型不是可修改的左值,因此不能被“分配”。

赋值运算符需要一个可修改的左值作为LHS操作数。

相关,报价C11,章§6.5.16

赋值操作员有修改的左值作为其左操作数。

和,章§6.3.2.1

[....]一种修改的左值是一个左值即 不具有阵列型,不具有不完整的类型,不具有constqualified 类型,并且如果它是一个结构或联合,没有任何构件(包括, 递归,任何成员或所有的元件包含聚集体或联合)与constqualified 类型。

在你的情况下,对于数组定义像

char name[5][10]; 

元件name[0]char [10]类型的,也就是10 char秒的阵列。

+0

可能有趣的是提及'strcpy'及其工作原理。也许那么OP会更清楚地理解为什么它会与'strcpy'一起工作,以及为什么它不适用于它的方法。 :) – Michi

+2

@Michi很好,那会太多(太宽泛)。 OP已经声称知道为什么strcpy可以工作,但不能直接分配。 –

1

因为C不允许分配给一个数组。这是语言的一个限制。

请注意,您可以分配struct,即使包含数组:

#include <stdio.h> 
struct x 
{ 
    char s[20]; 
}; 

int main(void) 
{ 
    struct x x; 
    x = (struct x){ "test" }; 
    puts(x.s); 
} 
相关问题