OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

fgets( ) の返り値は何?

  • 暇なときにでも
  • 質問No.238385
  • 閲覧数752
  • ありがとう数2
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 59% (194/328)

fgets( ) はファイル終端に行くと0を返すらしいけど
それ以外の場合は何を返すんですか?

if( fgets( buf, 10, fp ) == 0 ) break;

のように、fgets( ) の返り値をそのまま使うことはできたけど
試しに、

char ret[255];
ret = fgets(buf, 10, fp);

とするとコンパイルエラーでした。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 24% (612/2465)

すみません、根本的な回答ではありませんでしたね。
バッファを読み込めた時は、読み込んだバッファの先頭ポインタを返します。
ファイルの終わり(EOF)や失敗した時はNULLを返します。
お礼コメント
A__

お礼率 59% (194/328)

バッファの先頭ポインタを返すんですか。
それでバッファには char* を指定しなくては
いけなかったんですね。
投稿日時 - 2002-03-20 21:02:58
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 24% (612/2465)

char *fgets(char *s, int size, FILE *stream); ですので、 char *ret; ret = fgets(buf, 10, fp); としてください。
char *fgets(char *s, int size, FILE *stream);
ですので、
char *ret;
ret = fgets(buf, 10, fp);
としてください。


  • 回答No.3
レベル7

ベストアンサー率 50% (7/14)

fgets()の返り値は、読込が成功すると、bufのポインタを返します。 ファイルの終端、または失敗した場合、NULLを返します。 ファイルの終端と失敗の区別はfeof()を使うことにより可能です。 if( fgets( buf, 10, fp ) == 0 ) { if( feof( fp ) != 0){ //ファイル終端 }else{ //エラー ...続きを読む
fgets()の返り値は、読込が成功すると、bufのポインタを返します。
ファイルの終端、または失敗した場合、NULLを返します。

ファイルの終端と失敗の区別はfeof()を使うことにより可能です。

if( fgets( buf, 10, fp ) == 0 ) {
if( feof( fp ) != 0){
//ファイル終端
}else{
//エラー
}
}
  • 回答No.4
レベル13

ベストアンサー率 37% (419/1115)

すみません、madmanさんの御回答にちょっとだけ補足させて下さい。 質問者の方は恐らくretはその文字列領域の先頭アドレスを示す、つまりret自身はchar*扱いだからというつもりで御使用になったのだと思いますが、実はこちらは定数です。 同じchar*でもmadmanさんの示された例では変数領域として用意されていますが、A__さんのお使いになったretはretという文字列領域の先頭アドレス以外とはな ...続きを読む
すみません、madmanさんの御回答にちょっとだけ補足させて下さい。
質問者の方は恐らくretはその文字列領域の先頭アドレスを示す、つまりret自身はchar*扱いだからというつもりで御使用になったのだと思いますが、実はこちらは定数です。
同じchar*でもmadmanさんの示された例では変数領域として用意されていますが、A__さんのお使いになったretはretという文字列領域の先頭アドレス以外とはなり得ない定数なのです。
従って、定数を書き換えることはできませんから勿論コンパイルエラーになるわけです。
お礼コメント
A__

お礼率 59% (194/328)

ありがとうございます。
buf も ret も char[] で宣言していました。
投稿日時 - 2002-03-20 21:06:35
  • 回答No.5
レベル12

ベストアンサー率 40% (237/589)

> fgets( ) はファイル終端に行くと0を返すらしいけど 既に回答が出ていますが、この表現にちょっと引っかかったので一言。 「0」と「'\0'」と NULL を、混同されていませんか? 大抵の処理系では NULL は 0 としても動きますが、規格上保証されているものではありません。(気の利いたコンパイラなら、警告が出るはずですが…) > if( f ...続きを読む
> fgets( ) はファイル終端に行くと0を返すらしいけど

既に回答が出ていますが、この表現にちょっと引っかかったので一言。

「0」と「'\0'」と NULL を、混同されていませんか?
大抵の処理系では NULL は 0 としても動きますが、規格上保証されているものではありません。(気の利いたコンパイラなら、警告が出るはずですが…)

> if( fgets( buf, 10, fp ) == 0 ) break;

ここは、きちんと「if (fgets(buf, 10, fp) == NULL) break; と書きましょう。
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ