ID非公開
ID非公開さん
2021/1/21 2:00
2回答
C言語で、freadやfputsなどをした後に、 fgetsを実行すると、nullを吐くのはどうしてですか? 具体的には、
C言語で、freadやfputsなどをした後に、 fgetsを実行すると、nullを吐くのはどうしてですか? 具体的には、 #include<stdio.h> int main(void) { FILE *fd = fopen("file2","a+"); char buf[6]; size_t fr = fread(buf,6,1,fd); char buf2[10]; char *s = fgets(buf2,10,fd); printf("%s",buf); printf("%s",s); return 0; } 出力結果:hello (null) のようなプログラムです。2つ目のprintf(引数がsのやつ)の出力がnullになります。 引数のfile2内にはhelloとだけ書かれています。 上のプログラムを以下のように変えると、helloと出力されます。 #include<stdio.h> int main(void) { FILE *fd = fopen("file2","a+"); char buf2[10]; char *s = fgets(buf2,10,fd); printf("%s",s); return 0; } 出力結果:hello
C言語関連・18閲覧
ベストアンサー
fgetsの戻り値 読み取り成功時: s ファイルの終りかつ,1 文字も読み取れなかった場合: 空ポインタ (NULL) 読み取り失敗時: 空ポインタ (配列の内容は不定) >file2内にはhelloとだけ書かれています。 size_t fr = fread(buf,6,1,fd); でファイルポインタはhelloの'o'の次の位置に移動しています char *s = fgets(buf2,10,fd); を実行した時はファイルの末尾から読もうとします 「ファイルの終りかつ,1 文字も読み取れなかった場合」に確答します
ID非公開
ID非公開さん
質問者
2021/1/21 8:56
fwriteなどでも似たような現象が起きるのは、 同じような原因ですか?
質問者からのお礼コメント
ありがとうございました。
お礼日時:1/21 13:14