K&R C(第二版,第 5.5 节)陈述如下(我强调):
char amessage[] = "a message"; /* an array */
char *pmessage = amessage; /* a pointer */
message是一个足够大的数组来保存字符序列和初始化它的 '\0' 。数组中的单个字符可能会更改,但message将始终引用相同的存储。OTOH,pmessage是一个指针,初始化为指向一个字符串常量;随后可以修改指针以指向别处;但如果您尝试修改字符串内容,则结果未定义。
现在,我的问题是我的 Linux 机器上的 gcc 4.6.1(或 c99)是否应该在使用 -Wall 编译以下程序时生成警告:
int main(void) {
char amessage[] = "a message";
char *pmessage = "a message";
pmessage[0] = 'b';
return 0;
}
(我发现 gcc 不会产生任何警告。如果我正确解释上述内容,我的期望是它应该。)