我对该代码有2个问题:
char* word="Hello World";
word[0]='a';
printf("%s",word);
我知道当你创建这样的字符串时,你不能更改字符串,因为它是一个常量字符串,所以我不明白为什么我可以运行这段代码并且没有任何错误(我使用代码块C99)?另一个奇怪的事情是,这个词并没有真正改变,printf仍在打印:“Hello World”。
答案 0 :(得分:5)
当您尝试修改字符串文字时,它会调用未定义的行为。结果可能是预期的或意外的。它会打印Hello World
或aello World
,也可以不打印任何内容。您可能会遇到分段错误或任何意外行为。
答案 1 :(得分:0)
将错误声明为
const char * word="hello world";
在您的情况下,它可能会在运行时崩溃,因为hello world
存储在只读内存中。
一般
const char *
和char *
几乎相同,但区别在于,如果您尝试编辑字符串,则const char *
在编译时显示错误,而char *
显示错误在运行时。