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