fgets
From cppreference.com
| ヘッダー <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、失敗時にはヌルポインタ。
ファイルの終端条件に遭遇した場合、stream の eof インジケータを設定します(feof() を参照)。これは、バイトが読み込まれなかった場合にのみ失敗とみなされ、その場合、ヌルポインタが返され、str が指す配列の内容は変更されません(つまり、最初のバイトはヌル文字で上書きされません)。
失敗が他のエラーによって引き起こされた場合、stream の error インジケータを設定します(ferror() を参照)。str が指す配列の内容は不定です(ヌル終端にすらなっていない可能性があります)。
[編集] 注意
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: TBD)
- 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 関数
[編集] 関連項目
| (C11)(C11)(C11) |
stdin、ファイルストリーム、またはバッファから書式化された入力を読み込む (関数) |
| (C11で削除)(C11) |
stdinから文字列を読み込む (関数) |
| ファイルストリームに文字列を書き込む (関数) | |
| (動的メモリーTR) |
区切り文字または行末までストリームから読み込み、自動的にリサイズされるバッファに格納する (関数) |
| C++ ドキュメント (fgets について)
| |