可能是重复问题:
C语言中char s[]和char *s有什么区别?
这更像是一个普遍性的问题,而不是试图修复某个问题。我一直在阅读C编程语言书籍,他们特别强调了以下两者之间的区别:
char amessage[] = "blah";
char *pmessage = "blah";
两者之间的区别在于一个是字符数组,另一个是指向字符串常量的指针。他们说修改字符数组是可以接受的,但你不应该修改字符串常量,因为这会触发未定义的行为。我的问题是:难道字符串常量不是以与字符数组相同的方式存储在内存中吗?为什么我可以像这样修改它:
char *p = "this is a string constant";
*(p+2) = 'a';
printf("%s", p);
最终打印结果为“thas is a string constant”,正如你所预期的那样。我可以理解,在运行时更改字符串常量可能会使其他人/您混淆,他们/您可能不希望其值发生变化,但从纯功能角度来看,有什么问题?可能触发哪些未定义的行为?当字符数组无法胜任时,它可能如何产生反作用?我只是想知道是否我对内存中字符串常量的工作方式及编译器如何看待它们有所遗漏。