为什么值字符串文字会发生变化

时间:2014-02-21 17:28:53

标签: c++ c undefined-behavior string-literals

main()
{
  char *c="abhishek";
  int i;
  c[2]=90;
  for(i=0;i<12;i++)
  {
    printf("%c",c[0])
  }
}

此处输出为abZishek。但这会导致总线错误,因为这是一个字符串文字,我们无法更改其值。为什么c的值会发生变化?

2 个答案:

答案 0 :(得分:7)

根据C ++标准的第2.14.5节§ 11,它会调用未定义的行为:

  

尝试修改字符串文字的效果未定义。

这意味着任何事情都可能发生,确实发生了一些事情。您不得对调用undefined behavior时可能发生的情况做出任何假设。

答案 1 :(得分:3)

“未定义的行为”不保证“总线错误”或任何其他类型的错误。通常,它不容易被检测到,因此您的编译器不需要打扰。在这里,它没有打扰。但是,这样做可能会导致不可预测或奇怪的事情发生。

您还缺少库包含和main的返回类型;你正在使用哪本C ++书?