Manpages

名 前

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

書 式

#include <stdio.h>

char *gets(char *s);

説 明

こ の 関 数 は 使 用 し な い こ と

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

返 り 値

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 で 参 照 で き る 。

関 連 項 目

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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。