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

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

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


fgets関数

概要

ファイルから文字列を1行受け取る。

ヘッダ

stdio.h

形式

char* fgets(char* restrict s, int n, FILE* restrict stream);

引数

s

入力文字列を受け取る配列を指すポインタ。

n

引数s が指す配列の要素数。

stream

入力ストリーム。

戻り値

成功時は 引数s を返す。読み取りエラーの発生時や、配列に1文字も読み取らなかった場合は、ヌルポインタが返される。

詳細

改行文字を読み取ったとき、あるいは、ファイルの終わりに達したときに読み込みを終える。ただし、引数n - 1文字分までしか読み取らない。改行文字を読み取った場合は、それも配列に書き込まれる。いずれにしても、配列に格納された最後の文字の後ろに、ヌル文字(‘\0’) が付加される。

引数stream にstdinを指定することで、標準入力から受け取ることも可能である。

注意

同じような用途の gets関数とは異なり、改行文字も受け取る(なお、gets関数は使うべきではない)。

読み取りエラーが発生した場合、引数s が指す配列の要素の状態は不定であるから参照してはならない。

使用例

#include <stdio.h>
#include <stdlib.h>

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

    for (;;) {
        char buf[80];

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

        // 末尾が改行文字であれば、'\0' で上書きする
        char* p = strchr(buf, '\n');
        if (p != NULL) {
            *p = '\0';
        }

        puts(buf);
    }

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

入力ファイル(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 のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る