是否应使用C中的文字初始化具有指定大小的静态声明字符数组?
例如,
gcc编译好了……
char s[7] = "abc";
但它给出了错误“赋值不兼容的类型”与…
char s[7]; s = "abc";
有什么不同?
第一个是初始化; 它意味着“在堆栈上声明一个包含7个char
的数组,并使用'a'
, 'b'
, 'c'
填充前3个元素,并使用'\0'
填充其余元素”。
在第二个中,您没有将数组初始化为任何东西。 然后,您尝试分配给永远无效的数组。 像这样的东西会“起作用”:
const char *s; s = "abc";
但意思略有不同( s
现在是指针 ,而不是数组 )。 在大多数情况下,差异很小。 但有几个重要的警告,例如你不能修改内容。 另外, sizeof(s)
会给你一个指针的大小,而在原始代码中,它会给你7(数组的大小)。
推荐读物是: http : //c-faq.com/charstring/index.html 。