fgets
提供: 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
に格納されます。 1バイト以上読み込み、エラーが発生しなければ、 str
の最後の文字の直後の位置にヌル文字が書き込まれます。
目次 |
[編集]引数
str | - | 文字配列の要素を指すポインタ |
count | - | 書き込む最大文字数 (一般的には str の長さ) |
stream | - | データを読み込むファイルストリーム |
[編集]戻り値
成功した場合は str
、失敗した場合はヌルポインタ。
ファイル終端の状況に遭遇した場合は、 stream
のファイル終端指示子 (feof() を参照) をセットします。 これは1バイトも読み込まない場合にのみ発生する失敗です。 この場合はヌルポインタが返され、 str
の指す配列の内容は変更されません (すなわち最初のバイトがヌル文字で上書きされません)。
失敗が何らかの他のエラーに起因する場合は、 stream
のエラー指示子 (ferror() を参照) をセットします。 str
の指す配列の内容は不定になります (ヌル終端されない可能性もあります)。
[編集]ノート
POSIX はさらに、ファイル終端に達した以外の失敗が発生した場合、 fgets が errno を設定することを要求しています。
標準の仕様は count<=1 の場合に曖昧ですが、一般的な処理系は
- count <1 の場合は何もせず、エラーを報告します。
- count ==1 の場合は
- 一部の処理系は何もせず、エラーを報告します。
- それ以外の処理系は何も読み込まず、 str[0] にゼロを格納し、成功を報告します。
[編集]例
Run this code
#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
[編集]参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.21.7.2 The fgets function (p: 331)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.7.2 The fgets function (p: 296)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.7.2 The fgets function
[編集]関連項目
(C11)(C11)(C11) | stdin、ファイルストリームまたはバッファから書式付き入力を読み取ります (関数) |
(C11で削除)(C11) | stdin から文字列を読み込みます (関数) |
ファイルストリームに文字列を書き込みます (関数) | |
(dynamic memory TR) | ストリームから自動的にサイズ変更されるバッファにデリミタまたはファイル終端まで読み込みます (関数) |
fgets の C++リファレンス |