为什么修改字符串文字会导致分段错误?

为什么修改预先初始化的字符串文字会导致分段错误? 例如:

char *str = "Hello world"; str[0] = 'h'; 

当你将str初始化为该字符串值时,编译器是否自动为该字符串常量分配内存,将其起始位置分配给str并在程序退出时释放它?

它位于进程地址空间的只读部分,因为字符串文字是常量。 ( str变量不在只读空间中,但应该使它指向有效的可写位置,然后才能像你一样使用它。)