我在维基百科上看到了这个
int main(void)
{
char *s = "hello world";
*s = 'H';
}
当包含这段代码的程序被编译时,字符串“hello world”被放置在程序可执行文件中标记为只读的部分;加载时,操作系统将它与其他字符串和常量数据一起放在只读内存段中。执行时设置一个变量s指向字符串所在位置,并试图通过该变量向内存写入一个H字符,导致段错误**
我不知道为什么把字符串放在只读段中。请有人解释一下。
最佳答案
字符串文字存储在只读内存中,这就是它的工作原理。您的代码使用了一个初始化为指向存储字符串文字的内存的指针,因此您无法有效地修改该内存。
要获取可修改内存中的字符串,请执行以下操作:
char s[] = "hello world";
那你没问题,因为现在你只是使用常量字符串来初始化一个非常量数组。
关于c - 为什么在以下代码中出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499300/