是否应使用C中的文字初始化具有指定大小的静态声明的字符数组?

Joh*_*ton 2 c arrays string char

例如,

gcc编译好了......

char s[7] = "abc";
Run Code Online (Sandbox Code Playgroud)

但它给出了错误"赋值不兼容的类型"与...

char s[7];
s = "abc";
Run Code Online (Sandbox Code Playgroud)

有什么不同?

Oli*_*rth 7

第一个是初始化; 它的意思是"声明7的阵列char在栈上,并与填充第一3个元素'a','b','c',并用剩余的元素'\0'".

在第二个中,您没有将数组初始化为任何东西.然后,您尝试分配给永远无效的数组.像这样的东西会"起作用":

const char *s;
s = "abc";
Run Code Online (Sandbox Code Playgroud)

但意思略有不同(s现在是指针,而不是数组).在大多数情况下,差异很小.但有几个重要的警告,例如你不能修改内容.另外,sizeof(s)给你一个指针的大小,而在原始代码中,它会给你7(数组的大小).

推荐阅读是这样的:http://c-faq.com/charstring/index.html.

  • 另请注意,在第一种情况下,其余三个条目也初始化为'\ 0'; 这可能非常有用. (2认同)