最新閲覧日:

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

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

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

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

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

A 回答 (5件)

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



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

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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報