以下代码崩溃的可能原因?

时间:2014-01-29 18:33:04

标签: c pointers crash char

我在两个不同的编译器上测试了下面的代码,它先崩溃但第二次工作正常吗?

代码是

char *str="testing";
*str='b';
printf("%c",*str);

输出:在第一个编译器

上崩溃 第二个编译器

b

崩溃的可能原因是什么?

3 个答案:

答案 0 :(得分:2)

崩溃的原因是写入字符串文字的内存是未定义的行为。您的代码*str='b'直接写入分配给字符串文字的第一个char内存中。 C允许编译器将文字内容放入受保护以免写入的内存区域。在该区域的任何地方书写都会导致分段错误。

将声明更改为

char str[]="testing";

避免错误。如果将str声明为char数组(而不是char指针),编译器会生成代码以将str的内容复制到可写内存中,从而避免错误当你写信str时。

答案 1 :(得分:0)

您正在写入字符串文字,这具有未定义的行为。

答案 2 :(得分:0)

通常(并且如您所见,在依赖于系统的基础上),字符串文字放在只读内存中,然后尝试更改它们将导致运行时错误。