c-字符串声明过程中出错



为什么

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

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

const char* line = "1234";

最新更新