字符串声明时出错

时间:2011-06-05 15:38:56

标签: c string

为什么

char line[10] = "1234";

工作正常,但

char line[10];
line = "1234";

抛出

error: incompatible types in assignment

错误?

3 个答案:

答案 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*,这是非法的。将常量(或其他)字符串分配给字符串变量的正确方法是使用strcpystrncpy或任何其他字符串处理函数。

答案 2 :(得分:0)

因为这些是语言规则,正如其他人所解释的那样。我会这样写,但要避免在前面声明有多少个字符。

const char* line = "1234";