2012-01-28 74 views
0

我有运行时错误,我不知道是什么原因。我的功能代码错误(停止工作)

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; 
} 
+2

你为什么不跑它在调试器中知道哪一行导致了问题? – Aziz 2012-01-28 10:51:02

回答

2

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

它会像这更好:

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

"Hello world"是字符串文字,即const char *。你不允许修改它。那如何编译?它应该告诉你,你不允许将const char *传递给一个需要char *的函数。

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

0

这会工作: - 正如上面提到的海峡是恒定的,因此不能被修改,例如: -

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; 
} 
+0

'strnew'获取'delete'd在哪里? – Johnsyweb 2012-01-28 11:08:21

+0

@Johnsyweb感谢您纠正我...修改代码...关心 – Invictus 2012-01-28 11:10:11