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
getdelete
d?@Johnsyweb谢谢你纠正我…修改了代码…关于strnew
getdelete
d?@Johnsy谢谢你纠正我…修改代码…问候