C言語編 標準ライブラリのリファレンス fgets

先頭へ戻る

fgets関数

概要 ファイルから文字列を1行受け取る。
ヘッダ stdio.h
形式 char* fgets(char* s, int n, FILE* stream);
引数 s 入力文字列を受け取る配列を指すポインタ。
n 引数s が指す配列の要素数。
stream 入力ストリーム。
戻り値 成功時は 引数s を返す。読み取りエラーの発生時や、配列に1文字も読み取らなかった場合は、ヌルポインタが返される。
詳細 改行文字を読み取ったとき、あるいは、ファイルの終わりに達したときに読み込みを終える。ただし、引数n - 1文字分までしか読み取らない。改行文字を読み取った場合は、それも配列に書き込まれる。いずれにしても、配列に格納された最後の文字の後ろに、ヌル文字('\0') が付加される。
引数stream に stdin を指定することで、標準入力から受け取ることも可能である。
注意 同じような用途の gets関数とは異なり、改行文字も受け取る(なお、gets関数は使うべきではない)。
読み取りエラーが発生した場合、引数s が指す配列の要素の状態は不定であるから参照してはならない。
また、規格文書の fgets関数の項目は不明確な点があり、エラー指示子やファイル終了指示子をセットするのかどうかの記述がない(fgetc関数には記述があるのだが)。とはいえ、それぞれの指示子の意味から察するに、恐らくそれぞれセットされると思われる。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp;
    char str[80];

    fp = fopen( "test.txt", "r" );
    if( fp == NULL ){
        fputs( "ファイルオープンに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    for( ;; ){
        if( fgets( str, sizeof(str), fp ) == NULL ){
            if( feof( fp ) ){
                /* ファイルの終わり */
                break;
            }
            else{
                fputs( "エラーが発生しました。\n", stderr );
                exit( EXIT_FAILURE );
            }
        }
        puts( str );
    }

    if( fclose( fp ) == EOF ){
        fputs( "ファイルクローズに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    return 0;
}

入力ファイル(test.txt)

1行目
2行目
3行目

実行結果:

1行目
2行目
3行目
関連 ワイド文字バージョンの fgetws関数がある。
解説章 第40章


参考リンク



更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/7 「詳細」「注意」「使用例」を大幅に修正。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS