为什么不能指定一个指向数组的指针?

时间:2016-11-14 11:51:07

标签: c arrays pointers char assignment-operator

在C中,我正在编码

char * real = strdup("GEORGE");
char one[1024];
one = real;

它给出了错误:

  

无效的初始化程序

有什么建议吗? 有没有机会我可以使字符数组等于char指针?

2 个答案:

答案 0 :(得分:3)

在您的代码中,one是数组类型的变量。因此,

 one = real;

尝试分配给不允许的数组类型。

详细说明,数组名称不是可修改的左值,赋值运算符仅适用于可修改的左值作为LHS操作数。

引用C11,章节§6.5.16

  

赋值运算符应具有可修改的左值作为其左操作数。

然后,章节§6.3.2.1,( emphais mine

  

可修改的左值是一个左值   没有数组类型,没有不完整的类型,没有const限定   类型,如果是结构或联合,则没有任何成员(包括,   递归地,所有包含聚合或联合的成员或元素与const限定   类型。

您需要使用strcpy()将内容复制到数组中。

答案 1 :(得分:3)

C需要数组初始值设定项中的常量。你被允许这样做:

char one[1024] = "GEORGE";

或者

char one[1024] = {'G','E','O','R','G','E'};

但在任何情况下,无论是初始化程序还是不允许 ,都可以指定指向数组的指针。

另一方面,您可以将<{1}}指针的内容复制到数组中。根据您的源数组是否以空值终止,您可以使用charstrcpy,如下所示:

memcpy

strcpy(one, real);