FGETS(3) FreeBSD ライブラリ関数マニュアル FGETS(3)
名称
fgets, gets − ストリームから行を取得 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <stdio.h> char * |
fgets(char *str, int size, FILE *stream); char * |
gets(char *str); |
解説 |
fgets() 関数は、最大で size で指定された文字数より 1 だけ少ない数の文字を stream から読み込み、文字列 str に保存します。読込みは、改行文字が見つ かったり、ファイルの終了あるいはエラーが見つかったりした場合に停止しま す。改行文字は、存在していれば保持されます。任意の文字を読み込んでエラー が発生しなかった場合、文字列の最後には ‘\0’ 文字が追加されます。 gets() 関数は fgets() 関数で size を無限にし、 stdin を stream にしたもの と等価ですが、文字列中で改行文字が保存されない (改行文字が存在した場合) 点が異なります。入力行が存在する場合、それが十分短く文字列に収まりきるこ とを保証するのは呼び出し側の責任です。 |
戻り値
正常終了すると、 fgets() と gets() は文字列のポインタを戻します。キャラク タを読み込む前にファイルの終了に達すると、 NULL が戻されます。この場合、 バッファの内容は変化しません。エラーが発生すると NULL が戻され、バッファ の内容は不定になります。 fgets() 関数と gets() 関数はファイルの終了とエ ラーとを区別しません。ファイルの終了かエラーかを判断するには、呼び出し側 が feof(3) と ferror(3) を使用しなくてはなりません。 |
エラー
[EBADF]
指定された stream が、読込み可能なストリームではありま せん。 fgets() 関数がエラーになると、ルーチン fflush(3), fstat(2), read(2), malloc(3) 用に指定されたエラーのいずれかが errno に設定される場合がありま す。 gets() 関数がエラーになると、ルーチン getchar(3) 用に指定されたエラーが errno に設定される場合があります。 関連項目 |
規格
fgets() 関数と gets() 関数は、 ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合して います。 |
バグ
通常、次の入力行がある任意の長さより短いことを保証するのは不可能であり、 また入力バッファをオーバフローするとほぼ必ずセキュリティ違反となるため、 プログラムでは gets() を 絶対に使用しないでください。 gets() は、 ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合するためだけに存在しています。 FreeBSD 10.0 June 4, 1993 FreeBSD 10.0 |