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

use*_*653 0 c c++ string-literals undefined-behavior

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

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

4pi*_*ie0 7

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

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

这意味着任何事情都会发生,确实发生了一些事情 您不得对调用未定义行为时可能发生的情况做出任何假设.