質問: char型の配列3つに文章1行ずつ終端までループで順番に上書きするプログラムを作りたいのですが、以下のプログラムのコメントアウトの部分で(core dump)が起きてしまいます。 よく理解していないのですが、fgetsによってbufに書き込まれるものは文字列ではなくintなのでしょうか。 何が書き込まれているのかよくわかりません・・・。なので何が起きているのか理解できませんでした。 よろしくお願いいたします。 ``` #include int main(){ char buf [100]; char tmp [100]; tmp[2]; int count=0; while(fgets(buf,sizeof(buf),stdin)!=NULL){ tmp[count%3]=buf; count +=1; } for(int i=0;i<3;i++){ printf("%s",tmp[i]);// エラー部分 %dにてintが表示 } return 0; } ```
回答: buf は char 配列(= 文字列)の先頭を指すポインタですが、 これを char 配列 tmp に突っ込んだときにキャストが起こってます。 僕の手元でやると `0x7ffee3fc7440` が `64` に切り詰められました。 で printf の %s が `64` を読もうとして segmentation fault という流れですね。 `char tmp [100];` を `char* tmp [100];` にすると直ります。 追記 `tmp[i]` に `buf` を何回か入れてますが、 `buf` は毎回同じ値です。 つまり出力するとき、最後に読み込んだ文字列が複数回出力されます。 これはまた別のバグなので頑張ってくださいbb