我的功能代码出错(停止工作)

时间:2012-01-28 10:47:29

标签: 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 main(){

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

    return 0;
}

3 个答案:

答案 0 :(得分:2)

"Hello world"是字符串文字,即const char *。你不能修改它。这甚至是如何编译的?它应该告诉您,不允许您将const char *传递给带char *的函数。

编辑:当然我也应该提供解决方案。 kotlinski已经指出:写char myString[] = "Hello World!"将创建一个char数组,它是字符串文字的副本。你可以随意修改它(前提是你没有写出界限)。

答案 1 :(得分:2)

您无法修改“Hello World”,它是一个常量的只读字符串。

它会更好地工作:

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

答案 2 :(得分:0)

这样可行: - 如上所述,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;
}