一些GCC编译器如何修改常量char指针?

Ngu*_* al 2 c gcc

我正在读一本书,标题为“理解和使用C指针”。在第110页上,这些行如下:

...但是,在某些编译器(例如GCC)中,可以修改字符串文字。考虑以下示例:

  char *tabheader = "Sound";
   *tabheader = 'L';
   printf("%s\n", tabheader);   //Displays "Lound"
Run Code Online (Sandbox Code Playgroud)

继续并描述其用法const char *tabheader将阻止修改此变量。

我目前正在使用Cloud 9 / Ubuntu。我使用GCC编译了这段代码并运行了它。segmentation fault如我所料,它导致了错误。

我对书中的这些陈述感到非常困惑。一直以来,我对语句的理解char *tabheader = "Sound";const char *tabHeader = "Sound"; 现在相同,这本书在说,这取决于哪个gcc编译器

我的问题是:哪个GCC编译器允许运行此代码?你对此的看法如何?这也属于未定义的行为吗?

Bar*_*mar 5

如果-fwritable-strings在编译时使用该选项,则它将在4.0之前的GCC版本中起作用。此选项在4.0中已删除。