kazmax - Linux で自宅サーバー

gets - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. バグ
  7. 関連項目

名前

fgetc, fgets, getc, getchar, gets, ungetc - 文字と文字列の入力

書式

#include <stdio.h>

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);

説明

fgetc()は、 streamから次の文字を unsigned charとして読み、 intにキャストして返す。ファイルの終わりやエラーとなった場合は EOFを返す。

getc()は fgetc()と同様だが、 streamを複数回評価するマクロとして実装されているかもしれない。

getchar()は getc(stdin)と同じである。

gets()は、改行文字か EOFまでの 1行を stdinから読み込み sが指すバッファに格納する (末尾の改行文字や EOFは '\0'に置き換えられる)。 バッファ・オーバーランのチェックは行われない (下記の バグを参照)。

fgets()は streamから最大で size - 1個の文字を読み込み、 sが指すバッファに格納する。読み込みは EOFまたは改行文字を読み込んだ後で停止する。 読み込まれた改行文字はバッファに格納される。 '\0'文字が一つバッファの中の最後の文字の後に書き込まれる。

ungetc()は、後の read 操作で読めるように、 cを unsigned charにキャストして streamに書き戻す。 書き戻された文字は逆順に戻される; 書き戻しとして保証されているのは、一文字だけである。

ここで述べた関数や stdioライブラリの入力関数を同じ入力ストリームに対して互いに混ぜて使うことができる。

これらの処理をロックせずに行いたいときは、  unlocked_stdio(3) を参照のこと。

返り値

fgetc(),getc(),getchar()は、文字を unsigned charとして読んで intにキャストして返す。ファイルの終わりやエラーの場合は EOFを返す。

gets()と fgets()は、成功すると sを返し、エラーや 1 文字も読み込んでいないのにファイルの終わりになった 場合に NULL を返す。

ungetc()は成功すると cを返し、エラーの場合は EOFを返す。

準拠

C89, C99. LSB では gets()は非推奨である。

バグ

gets()は絶対に使用してはならない。 前もってデータを知ることなしに gets()が何文字読むかを知ることはできず、 gets()がバッファの終わりを越えて書き込み続けるため、 gets()を使うのは極めて危険である。 これを利用してコンピュータのセキュリティが破られてきた。 代わりに fgets()を使うこと。

入力ストリームのファイルディスクリプタに対して、 stdioライブラリの入力関数と、低レベル呼び出しの read()を混ぜて呼び出す事は勧められない。 結果がどうなるかは分からず、おそらくあなたの 望んでいる結果にはならないだろう。

関連項目