是否应使用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 。