将char指针值等同于某个char的分段错误

时间:2010-08-03 06:55:43

标签: c++ c string pointers

  

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

char* string = "abcd";

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

*string = 'p';

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

有人可以向我解释为什么会发生这种情况。

由于

Alok.Kr。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

字符串文字在C中是不可修改的。之前已经多次询问和回答过,但搜索起来并不容易。

答案 2 :(得分:1)

如果要修改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