在C中,我正在编码
char * real = strdup("GEORGE");
char one[1024];
one = real;
它给出了错误:
无效的初始化程序
有什么建议吗? 有没有机会我可以使字符数组等于char指针?
答案 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}}指针的内容复制到数组中。根据您的源数组是否以空值终止,您可以使用char
或strcpy
,如下所示:
memcpy
或
strcpy(one, real);