我正在读一本书,标题为“理解和使用C指针”。
在第110页上,这些行如下:
...但是,在某些编译器(例如GCC)中,可以修改字符串文字。考虑以下示例:
char *tabheader = "Sound";
*tabheader = 'L';
printf("%s\n", tabheader); //Displays "Lound"
它继续说明
const char *tabheader
的用法,这将防止修改此变量。我目前正在使用Cloud 9 / Ubuntu。我使用GCC编译了这段代码并运行了它。如我所料,它导致了
segmentation fault
错误。我对书中的这些陈述感到非常困惑。
一直以来,我对语句
char *tabheader = "Sound";
的理解与const char *tabHeader = "Sound";
相同,这本书在说,这取决于哪个gcc编译器我的问题是:哪个GCC编译器允许运行此代码?
你对这个有什么看法?
这也属于未定义的行为吗?
最佳答案
如果在编译时使用-fwritable-strings
选项,则此功能将在4.0之前的GCC版本中起作用。此选项在4.0中已删除。