【发布时间】:2011-01-27 23:56:54
【问题描述】:
例如,
gcc 编译这个没问题...
char s[7] = "abc";
但它给出了错误“分配中不兼容的类型”...
char s[7];
s = "abc";
有什么区别?
【问题讨论】:
例如,
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。
【讨论】: