可以在VC或gcc上正确编译以下代码:
char *str = "I am a const!";
str[2] = 'n';
然而,显然存在运行时错误。因为“我是一个常客!”是一个 const char *,为什么编译器不会给出错误甚至是警告?
此外,如果我定义char a[] = "I am const!"
,a
中的所有元素都可以修改,为什么这次字符串文字成为nonconst
?
答案 0 :(得分:12)
就C而言,该字符串文字不是常量,它是一个char[14]
,它分配给一个char *,这是完全正常的。
但是,C确实说改变字符串文字是未定义的行为。