Namespaces
Variants

fgets

From cppreference.net
< c ‎ | io
定義済みヘッダー <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 に書き込まれた最後の文字の直後の位置にnull文字を書き込みます。

目次

パラメータ

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

戻り値

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

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

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

注記

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

標準仕様は 不明確 ですが、 count <= 1 の場合、一般的な実装では

  • count count < 1 の場合、何もせず、エラーを報告
  • count 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 から文字列を読み込む
(関数)
ファイルストリームに文字列を書き込む
(関数)
区切り文字/行末までストリームから自動的にサイズ変更されるバッファに読み込む
(関数)