2017-06-30 18 views
1

文字列の 'f'や 'o'を 'x'に変更するCで関数を構築しようとしています。何らかの理由で、問題なくコンパイルされていても、私がプログラムを実行するときにセグメンテーションフォルト(コアダンプ)が得られます。プログラムがアクセス権のないメモリ内の場所にアクセスしようとすると、セグメンテーションフォルトが発生することがわかりましたが、私のコードで何がこの問題を引き起こしているのか分かりません。ここに私のコードは次のとおりです。文字列を変更するとセグメンテーションフォールト(コアダンプ)が発生する

#include <stdio.h> 

void censor(char p[]); 

int main(){ 


    censor("foodfool"); 
    return 0; 
} 

void censor(char p[]){ 

    int i; 
    for(i = 0;p[i] != '\0';i++){ 
     if(p[i] == 'f' || p[i] == 'o') 
      p[i] = 'x'; 
     printf("%c", p[i]);  

    } 

    printf("\n"); 
} 
+0

文字列リテラルを変更できない環境を使用しています。 'fgets'を使ってstdinから文字列を読み込むようにプログラムを変更すれば動作します。 – zwol

+2

'censor(" foodfool ");を' char s [] = "foodfool"に置き換えます。検閲(s); ' –

+0

なぜタイプエラーではないのだろうか。 "const char *をchar *に変換できません"またはそのようなもの – NieDzejkob

答えて

2

文字列"foodfool"には、変更することはできませんコンパイル時の定数、です。 char配列(char[])またはヒープ割り当てcharポインタ(char*)に置き換えてください。

+0

これは大変助かりました! –

関連する問題