Linux repositories inspector
GNU
2014-01-24
Aliases: fgetc(3), fgetc(3), fgetc(3), fgetc(3), fgetc(3), fgets(3), fgets(3), fgets(3), fgets(3), fgets(3), getc(3), getc(3), getc(3), getc(3), getc(3), getchar(3), getchar(3), getchar(3), getchar(3), getchar(3), ungetc(3), ungetc(3), ungetc(3), ungetc(3), ungetc(3)

manpages-ja-dev

Japanese version of the manual pages (for developers)

man-pages-ja

Japanese man (manual) pages from the Japanese Manual Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

名前

gets - 標準入力からの文字列を取得する (非推奨)

書式

#include <stdio.h>

char *gets(char *s);

説明

この関数は使用しないこと
gets() は、改行文字か EOF までの 1行を stdin から読み込み s が指すバッファーに格納する (末尾の改行文字や EOF はヌルバイト (\(aq\0\(aq) に置き換えられる)。 バッファーオーバーランのチェックは行われない (下記の「バグ」を参照)。

返り値

gets() は、成功すると s を返し、エラーや 1 文字も読み込んでいないのにファイルの終わりになった 場合に NULL を返す。 しかし、バッファーの行き過ぎのチェックが行われないため、この関数が返るという保証はない。

準拠

C89, C99, POSIX.1-2001.
LSB は gets() を非推奨としている。 POSIX.1-2008 では gets() に廃止予定の印が付けられている。 ISO C11 では gets)() の規定が C 言語から削除されている。 glibc バージョン 2.16 以降では、機能検査マクロ _ISOC11_SOURCE が定義された 場合、glibc ヘッダーファイルでは gets)() の宣言が公開されない。

バグ

gets() は絶対に使用してはならない。 前もってデータを知ることなしに gets() が何文字読むかを知ることはできず、 gets() がバッファーの終わりを越えて書き込み続けるため、 gets() を使うのは極めて危険である。 これを利用してコンピュータのセキュリティが破られてきた。 代わりに fgets() を使うこと。
詳しい情報については、CWE-242 (別名 "Use of Inherently Dangerous Function" (「本質的に危険な関数を使う」)) を参照。 http://cwe.mitre.org/data/definitions/242.html で参照できる。

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
⇧ Top