Namespaces
Variants

fgets

From ja.cppreference.net
< c | io
 
 
ファイル入出力
型とオブジェクト
        
関数
ファイルアクセス
(C95)
書式なし入出力
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

書式付き入力
 
ヘッダで定義 <stdio.h>
char* fgets( char* str, int count, FILE* stream );
(C99 まで)
char* fgets( char* restrict str, int count, FILE* restrict stream );
(C99 以降)

最大 count - 1 文字を与えられたファイルストリームから読み込み、str が指す文字配列に格納する。改行文字が見つかった場合(その場合、str にその改行文字が含まれる)またはファイルの終わりに達した場合、解析は停止する。バイトが読み込まれ、エラーが発生しなかった場合は、str に書き込まれた最後の文字の直後にナル文字を書き込む。

パラメータ

str - char配列の要素へのポインタ
count - 書き込む最大文字数(通常は str の長さ)
stream - データを読み取るファイルストリーム

戻り値

str 成功時、失敗時はnullポインタ。

ファイル終端条件が発生した場合、 eof インジケータを stream に設定する( feof() 参照)。これはバイトが読み取られなかった場合にのみ失敗と見なされ、その場合はヌルポインタが返され、 str が指す配列の内容は変更されない(すなわち、先頭バイトがナル文字で上書きされない)。

失敗が他の何らかのエラーによって引き起こされた場合、 エラー インジケータを設定します( ferror() を参照)。 stream に対して設定されます。 str が指す配列の内容は不定です(null終端されていない可能性もあります)。

注記

POSIXはさらに要求する、fgetsがerrnoを設定することを、読み取りエラーが発生した場合に。

標準仕様は不明瞭であるがの場合にはcount <= 1、一般的な実装は

  • もしcount < 1なら、何もせずエラーを報告し、
  • もしcount == 1なら、
  • 一部の実装は何もせずエラーを報告し、
  • 他の実装は何も読み取らず、str[0]にゼロを格納して成功を報告する。

例

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
    rewind(tmpf);
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);
    if (feof(tmpf))
       puts("End of file reached");
}

出力:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.21.7.2 fgets関数 (p: 未定)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.21.7.2 fgets関数 (p: 241)
  • C11標準 (ISO/IEC 9899:2011):
  • 7.21.7.2 fgets関数 (p: 331)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.19.7.2 fgets関数 (p: 296)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.9.7.2 fgets関数

関連項目

stdin またはファイルストリーム、バッファから書式化された入力を読み込む
(関数)
(C11で削除) (C11)
stdin から文字列を読み込む
(関数)
ファイルストリームに文字列を書き込む
(関数)
区切り文字/行末までストリームから自動的にサイズ変更されるバッファに読み込む
(関数)