为什么
char line[10] = "1234";
工作正常,但
char line[10];
line = "1234";
抛出
error: incompatible types in assignment
错误?
答案 0 :(得分:5)
数组不是指针。在你的第二个例子中,line
是一个不可修改的左值,但更重要的是,无论你在右侧放置什么,它都不能有char [10]
类型(因为数组会衰减为非指针) -lvalue context)因此类型永远不会匹配。
对于它的价值,字符串文字的类型为char [N]
,而不是const char [N]
,尤其不是const char *
,尽管尝试修改它会调用未定义的行为。 (此处N
是引用文本的长度(以字节为单位),包括添加的空终止符。)
答案 1 :(得分:1)
第一行有效,因为它使用数据执行char
数组的初始化。它将与:
char line[10] = {'1', '2', '3', '4', '\0'};
在第二个示例中,"1234"
的类型为const char*
,因为它是指向常量char
数组的指针。您正尝试将const char*
分配给char*
,这是非法的。将常量(或其他)字符串分配给字符串变量的正确方法是使用strcpy
,strncpy
或任何其他字符串处理函数。
答案 2 :(得分:0)
因为这些是语言规则,正如其他人所解释的那样。我会这样写,但要避免在前面声明有多少个字符。
const char* line = "1234";