C++ 我的功能代码错误(停止工作)

C++ 我的功能代码错误(停止工作),c++,C++,我有运行时错误,我不知道是什么原因 void replace(char *str, char ch){ int i=0; while(*(str+i) != '\0'){ if(*(str+i) == ' '){ *(str+i) = ch; // I doubt in this line } i++; } cout << str << "\t"; } int

我有运行时错误,我不知道是什么原因

void replace(char *str, char ch){
    int i=0;
    while(*(str+i) != '\0'){
        if(*(str+i) == ' '){
            *(str+i) = ch;  // I doubt in this line
        }
        i++;
    }   
    cout << str << "\t";
}

int main(){

    replace("Hello World",'_');

    return 0;
}
void替换(char*str,char-ch){
int i=0;
而(*(str+i)!='\0'){
如果(*(str+i)=''){
*(str+i)=ch;//我对此表示怀疑
}
i++;
}   
cout
“Hello world”
是一个字符串文字,即
const char*
。您不允许修改它。它是如何编译的?它应该告诉您,您不允许将
const char*
传递到接受
char*
的函数中

编辑:当然我也应该提供一个解决方案。科特林斯基已经指出:编写
char myString[]=“Hello World!”
将创建一个char数组,该数组是字符串文本的副本。您可以自由修改它(当然,前提是您没有写越界)。

“Hello World”
是一个字符串文字,即
常量字符*
。不允许修改它。它是如何编译的?它应该告诉您,不允许将
常量字符*
传递到接受
字符*
的函数中

编辑:当然我也应该提供一个解决方案。科特林斯基已经指出:编写
char myString[]=“Hello World!”
将创建一个char数组,它是字符串文本的副本。您可以自由修改它(当然,前提是您没有写越界)。

您不能修改“Hello World”这是一个常量,只读字符串

这样会更好地工作:

char s[] = "Hello World!";
replace(s, "_");
您不能修改“Hello World”,它是一个常量只读字符串

这样会更好地工作:

char s[] = "Hello World!";
replace(s, "_");

这将起作用:-如上所述,str是常量,因此不能修改为:-

void replace(char *str, char ch){
int i=0;
char * strnew= new char[strlen(str) +1];
strcpy(strnew,str);
while(*(strnew+i) != '\0'){
    if(*(strnew+i) == ' '){
        *(strnew+i) = ch;  // I doubt in this line
    }
    i++;
}   
cout << strnew << "\t";
delete[] strnew;
}

int main()
{
replace("Hello World",'_');
getch();
return 0;
}
void替换(char*str,char-ch){
int i=0;
char*strnew=新字符[strlen(str)+1];
strcpy(strnew,str);
而(*(strnew+i)!='\0'){
如果(*(strnew+i)=''){
*(strnew+i)=ch;//我对此表示怀疑
}
i++;
}   

cout这将起作用:-如上所述,str是恒定的,因此不能这样修改:-

void replace(char *str, char ch){
int i=0;
char * strnew= new char[strlen(str) +1];
strcpy(strnew,str);
while(*(strnew+i) != '\0'){
    if(*(strnew+i) == ' '){
        *(strnew+i) = ch;  // I doubt in this line
    }
    i++;
}   
cout << strnew << "\t";
delete[] strnew;
}

int main()
{
replace("Hello World",'_');
getch();
return 0;
}
void替换(char*str,char-ch){
int i=0;
char*strnew=新字符[strlen(str)+1];
strcpy(strnew,str);
而(*(strnew+i)!='\0'){
如果(*(strnew+i)=''){
*(strnew+i)=ch;//我对此表示怀疑
}
i++;
}   

你为什么不在调试器中运行它来知道是哪一行引起了问题?为什么不在调试器中运行它来知道是哪一行引起了问题?哪里有
strnew
get
delete
d?@Johnsyweb谢谢你纠正我…修改了代码…关于
strnew
get
delete
d?@Johnsy谢谢你纠正我…修改代码…问候