在C中为char数组分配直接字符串

时间:2017-08-22 11:26:11

标签: c arrays string variable-assignment

在2D数组中,将直接字符串赋值给char数组,得到错误。

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

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

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

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

2 个答案:

答案 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);
}