改变常量字符串(C99)

时间:2014-02-16 09:21:30

标签: c string

我对该代码有2个问题:

char* word="Hello World";
word[0]='a';
printf("%s",word);

我知道当你创建这样的字符串时,你不能更改字符串,因为它是一个常量字符串,所以我不明白为什么我可以运行这段代码并且没有任何错误(我使用代码块C99)?另一个奇怪的事情是,这个词并没有真正改变,printf仍在打印:“Hello World”。

2 个答案:

答案 0 :(得分:5)

当您尝试修改字符串文字时,它会调用未定义的行为。结果可能是预期的或意外的。它会打印Hello Worldaello World,也可以不打印任何内容。您可能会遇到分段错误或任何意外行为。

答案 1 :(得分:0)

将错误声明为

const char * word="hello world";

在您的情况下,它可能会在运行时崩溃,因为hello world存储在只读内存中。

一般

const char *char *几乎相同,但区别在于,如果您尝试编辑字符串,则const char *在编译时显示错误,而char *显示错误在运行时。