【问题标题】:Segmentation fault in equating a char pointer value to some char [duplicate]将 char 指针值等同于某个 char 时出现分段错误 [重复]
【发布时间】:2011-03-24 13:56:31
【问题描述】:

可能重复:
Why is this C code causing a segmentation fault?

char* string = "abcd";

现在当我尝试更改此字符串的某些字符时,我得到分段错误

*string = 'p';

string[0] = 'p';
string[0] = 52;

谁能解释一下为什么会发生这种情况。

谢谢

Alok.Kr.

【问题讨论】:

标签: c++ c string pointers


【解决方案1】:

字符串字面量在 C 中是不可修改的。这个问题之前已经被问过很多次了,尽管搜索起来不太容易。

【讨论】:

  • 这就是为什么写 char const * p = "hello" 而不是 char * p = "hello" 是一个好习惯
【解决方案2】:

如果你写char* string = "abcd";,字符串“abcd”会存储在你内存的静态数据部分,你不能修改它。

如果你写char* string = 'p';,那就错了。首先,您尝试声明一个具有相同名称(字符串)的变量,更糟糕的是,您尝试将 char 值分配给 char 指针变量。这行不通。同样的事情:char[0] = 'p'; 对你的编译器真的没有任何意义,除了语法错误。

【讨论】:

  • 对不起所有的打字错误,我想我太困了,所以我输入了所有这些东西。
  • 好的。正如我所说的“字符串 [0] = 'p';”不能工作,因为字符串是静态数据并且是只读的。
【解决方案3】:

如果要修改string,请将其声明为数组,而不是指向字符串文字的指针。

#include <stdio.h>

int main()
{
    char string[] = "hello world";
    string[0] = 'H';
    string[6] = 'W';

    printf("%s\n", string);

    return 0;
}

结果:

$ /tmp/hello
Hello World

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2015-09-10
    • 2020-11-13
    • 2015-04-23
    • 2012-10-08
    • 2021-12-20
    相关资源
    最近更新 更多