gets -
標準入力からの文字列を取得する
(非推奨)
#include <stdio.h>
char *gets(char *s);
この関数は使用しないこと。
gets() は、改行文字か
EOF までの 1行を
stdin
から読み込み
s
が指すバッファーに格納する
(末尾の改行文字や
EOF
はヌルバイト ('\0')
に置き換えられる)。
バッファーオーバーランのチェックは行われない
(下記の「バグ」を参照)。
gets() は、成功すると
s
を返し、エラーや 1
文字も読み込んでいないのにファイルの終わりになった
場合に NULL を返す。
しかし、バッファーの行き過ぎのチェックが行われないため、この関数が返るという保証はない。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
gets() |
Thread safety |
MT-Safe |
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
で参照できる。
read(2),
write(2),
ferror(3),
fgetc(3),
fgets(3),
fgetwc(3),
fgetws(3),
fopen(3),
fread(3),
fseek(3),
getline(3),
getwchar(3),
puts(3),
scanf(3),
ungetwc(3),
unlocked_stdio(3),
feature_test_macros(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。