为什么"char*"可以指向"const char*"?

Fly*_*ind 7 c const char

可以在VC或gcc上正确编译以下代码:

char *str = "I am a const!";
str[2] = 'n';
Run Code Online (Sandbox Code Playgroud)

但是,显然存在运行时错误.因为"我是一个常客!" 是一个const char*,为什么编译器不会给出错误甚至是警告?


此外,如果我定义char a[] = "I am const!",a可以修改所有元素,为什么这次字符串文字成为nonconst

nos*_*nos 12

就C而言,该字符串文字不是const,它是char[14]您分配给char*的一个,这是完全正常的.

但是,C确实说改变字符串文字是未定义的行为.

  • @Flybywind:因为语言是这么说的.C语言的规范清楚地表明字符串文字是不可修改的,即使它们不是"const". (3认同)