c - 为什么在以下代码中出现段错误?

标签 c

我在维基百科上看到了这个

    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/

相关文章:

c - 为了遍历数组,我们应该使用 size_t 还是 ptrdiff_t?

配置和限制 PI Controller 的输出

c - 在C的main()中包含一个函数

c++ - 在 Windows 上从 Visual Studio 切换到 Emacs 的指南?

c - 请教推荐Lua与C/C++协同工作的方式?

c - 数组索引大于声明值。这怎么可能?

c - 指向接受常量和非常量参数的函数的指针

c - 尝试在 C 中分配二维数组时出错

c - 作为不同可能矢量化的函数的运行时间增益

c++ - MP3 帧头检测 FFF/FFE 同步问题