tail head cat sleep
QR code linking to this page

manページ  — FGETS

名称

fgets, gets – ストリームから行を取得

内容

ライブラリ

Standard C Library (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 に設定される場合があります。

関連項目

feof(3), ferror(3), fgetln(3)

規格

fgets() 関数と gets() 関数は、 ISO/IEC 9899:1990 ("ISO C90") に適合しています。

バグ

通常、次の入力行がある任意の長さより短いことを保証するのは 不可能であり、また入力バッファをオーバフローすると ほぼ必ずセキュリティ違反となるため、 プログラムでは gets() を 絶対に 使用しないでください。 gets() は、 ISO/IEC 9899:1990 ("ISO C90") に適合するためだけに存在しています。

FGETS (3) June 4, 1993

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

“ This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options! ”
— The Unix Haters' handbook