プロが教えるわが家の防犯対策術!

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

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

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

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

とするとコンパイルエラーでした。

A 回答 (5件)

char *fgets(char *s, int size, FILE *stream);


ですので、
char *ret;
ret = fgets(buf, 10, fp);
としてください。
    • good
    • 0

すみません、根本的な回答ではありませんでしたね。


バッファを読み込めた時は、読み込んだバッファの先頭ポインタを返します。
ファイルの終わり(EOF)や失敗した時はNULLを返します。
    • good
    • 1
この回答へのお礼

バッファの先頭ポインタを返すんですか。
それでバッファには char* を指定しなくては
いけなかったんですね。

お礼日時:2002/03/20 21:02

fgets()の返り値は、読込が成功すると、bufのポインタを返します。


ファイルの終端、または失敗した場合、NULLを返します。

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

if( fgets( buf, 10, fp ) == 0 ) {
if( feof( fp ) != 0){
//ファイル終端
}else{
//エラー
}
}
    • good
    • 0

すみません、madmanさんの御回答にちょっとだけ補足させて下さい。


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

ありがとうございます。
buf も ret も char[] で宣言していました。

お礼日時:2002/03/20 21:06

> fgets( ) はファイル終端に行くと0を返すらしいけど



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

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

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

ここは、きちんと「if (fgets(buf, 10, fp) == NULL) break; と書きましょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています