EN JA
FGETS(3)
FGETS(3) FreeBSD Library Functions Manual FGETS(3)

名称

fgets, getsストリームから 1 行を取得する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < stdio.h>

char *
fgets( char * restrict str, int size, FILE * restrict stream);

char *
gets( char *str);

解説

fgets() 関数は、与えられた stream から多くても size によって指定された文字の数より 1 だけ少ない数を読み込み、文字列 str に、それらを格納します。改行文字が見つかる、ファイルの終りとなる、またはエラーのとき、読み込みは、停止します。改行文字があるなら、保持されます。あらゆる文字が読み込まれ、エラーがないなら、‘ \0’文字が文字列を終了するために追加されます。

gets() 関数は、(もしあれば) 改行文字が文字列に格納されないことを除いて、無限の sizestdinstream がある fgets() と等価です。入力行があるなら、文字列に入るのに十分に短いことを保証することは、呼び出し側の責任です。

戻り値

成功して終了すると、 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:1999 (“ISO C99”) に適合しています。 ISO/IEC 9899:1999(「 ISO C99 」) に一致します。

セキュリティの考察

gets() 関数は、安全に使用することはできません。境界のチェックを欠き、呼び出しプログラムが次に入ってくる行の長さを確実に判断することができないたので、この関数の使用は、悪意があるユーザがバッファオーバフロー攻撃で実行しているプログラムの機能を自己の判断で変更することを可能にします。 fgets() 関数がすべての場合に使用されることを強く勧めます。
May 5, 2012 FreeBSD