,指针数组的赋值。请看注释部分的疑问

求助,指针数组的赋值。请看注释部分的疑问。
#include <iostream>
#include <cstring>
using namespace std ;

int replacefun(char* str, char c1, char c2);

int main(void)
{
char * p = "I love you China, do you love me?";
int m = 0;
m = replacefun(p, 'o', 'c');
cout << m << endl;
return 0;
}

int replacefun(char* str, char c1, char c2)
{
int num = 0;
while (*str != '\0')
{
if (*str == c1)
{
*str = c2;  // 这句话调试的时候内存报错
num++;
}
}
return num;
}

------解决方案--------------------
因为你的这个char * p 是一个常量字符串,不允许修改,改成这样定义就可以了
char p[] = "I love you China, do you love me?";
------解决方案--------------------
引用:
Quote: 引用:

"I love you China, do you love me?"
在存放在.rodata段,该段是只读的,当你强行做修改的时候,当然要报错喽
我调试的时候也觉得那个是只读的修改不了的,是不是必须要定义成数组的样子才能操作呢?char p[] = "I love you China, do you love me?";,像这样的?请问您为什么这个不是常量的可以修改的呀?

这样的话,你就把这个字符串拷贝进数组了,对于数组中的内容,可以随便修改呀. 原来的字符串还是不变的呀