C++ 将字符指针值等同于某个字符时出现分段错误

C++ 将字符指针值等同于某个字符时出现分段错误,c++,c,string,pointers,C++,C,String,Pointers,可能重复: 现在,当我试图改变这个字符串的某些字符时,我得到了分段错误 *string = 'p'; 或 有人能给我解释一下为什么会这样吗 谢谢 Alok.Kr.字符串文字在C语言中是不可修改的。这一点以前已经被多次询问和回答过,尽管搜索起来并不容易。如果您编写char*String=“abcd”字符串“abcd”存储在内存的静态数据部分,您不能修改它 如果你写char*string='p',那就错了。首先,您尝试用相同的名称(字符串)声明一个变量,更糟糕的是,您尝试为一个char指针变量分

可能重复:

现在,当我试图改变这个字符串的某些字符时,我得到了分段错误

*string = 'p';

有人能给我解释一下为什么会这样吗

谢谢


Alok.Kr.

字符串文字在C语言中是不可修改的。这一点以前已经被多次询问和回答过,尽管搜索起来并不容易。

如果您编写
char*String=“abcd”字符串“abcd”存储在内存的静态数据部分,您不能修改它


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

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

#include <stdio.h>

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

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

    return 0;
}

如果这只是C,那么删除C++标签,如果这是C++,请尽量避免标准库中的类型名称,因为它们可能会混淆(即不调用字符串<代码>字符串<代码>)“等号”在标题中使用不正确。变量不是“等同”的,它们是赋值的。抱歉所有的输入错误,我想我是太困了,所以我输入了所有这些东西。好的。正如我所说的,“string[0]='p';”无法工作,因为string是静态数据,并且是只读的。这就是为什么写char const*p=“hello”而不是char*p=“hello”是一个好习惯
string[0] = 'p';
string[0] = 52;
#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