2012-01-28 8 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

答えて

2

定数の読み取り専用文字列である "Hello World"は変更できません。 STR上述したように一定であり、従って、カントのような変更される: - - :

それが良い、このように動作します:

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

+0

@Johnsyweb私を訂正してくれてありがとう...コードを修正しました...よろしく – Invictus

関連する問題