gets
「gets」の意味・「gets」とは
「gets」は英語の動詞で、主に「得る」「取る」「理解する」などの意味を持つ単語である。主語によって形が変わる動詞であり、主に三人称単数形(he, she, itなど)の現在形として用いられる。例えば、「He gets a book.」は「彼は本を手に入れる」という意味になる。「gets」の発音・読み方
「gets」の発音は、IPA表記では/gɛts/となる。IPAのカタカナ読みでは「ゲツ」となる。日本人が発音するカタカナ英語では「ゲッツ」と読む。この単語は発音によって意味や品詞が変わる単語ではないため、一つの読み方のみを覚えればよい。「gets」の定義を英語で解説
「gets」は英語で「to receive or obtain something」と定義される。これは「何かを受け取る、または得る」という意味である。また、「to understand something」という意味もあり、「何かを理解する」という意味も含む。「gets」の類語
「gets」の類語としては、「receives」「obtains」「understands」などが挙げられる。これらはすべて「gets」が持つ「受け取る」「得る」「理解する」という意味をそれぞれ表す単語である。「gets」に関連する用語・表現
「gets」に関連する表現としては、「get along」「get together」「get over」などがある。これらはフレーズ動詞と呼ばれ、単独の「get」の意味とは異なる特定の意味を持つ。「gets」の例文
1. He gets a new job.(彼は新しい仕事を得る)2. She gets the idea quickly.(彼女はすぐにその考えを理解する)
3. The dog gets a bone.(犬は骨を手に入れる)
4. The company gets a lot of complaints.(その会社は多くの苦情を受け取る)
5. He gets the highest score in the class.(彼はクラスで最高のスコアを得る)
6. She gets a letter from her friend.(彼女は友人から手紙を受け取る)
7. The student gets the teacher's explanation.(その生徒は先生の説明を理解する)
8. The team gets a new coach.(そのチームは新しいコーチを得る)
9. The child gets a toy from his parents.(その子供は両親からおもちゃをもらう)
10. The researcher gets the data from the experiment.(その研究者は実験からデータを得る)
gets
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2015/01/16 01:55 UTC 版)
gets は、C言語における標準入力から1行分の文字列を取り出す関数である。この関数はバッファオーバーランを防ぐことが不可能という致命的な脆弱性を持っており、2011年の改定のC11の標準CライブラリやC++14の標準C++ライブラリより廃止された[1]。
形式
C11の1つ前の版の標準規格であるC99までにおいて、<stdio.h> で gets は以下のような形式で宣言されていることが規定されていた。
char *gets(char *s);
gets は標準入力から改行 ('\n') が現れるまでデータを読み込み、引数で渡された s に格納する、このとき改行文字は終端記号 ('\0') に置き換える。戻り値にはエラーが発生した場合は NULL を、それ以外は s を返す。
scanf の %d や %s と異なり、改行文字は読み込んだ後で終端記号に書き換えるためストリームに改行文字は残らない。このため scanf のような改行文字の処理は必要とはしない。逆に scanf で呼ばれた直後に gets を呼ぶと、入力ストリームの先頭に改行文字が残っているため gets は空の文字列を返してしまう。このため scanf と混在して使うべきではないとされている[2]。
セキュリティ
以下のようなコードがあった場合を考えてみる。
char a[10]; gets(a);
このとき、入力されたデータが a の長さから終端記号を除いた9バイトより大きいものであるなら、このコードではバッファオーバーランが発生する。入力されるデータの長さの予測は不可能なので、他の関数(scanf や fgets など)では格納先に入力できる最大長を指定することでバッファオーバーランを回避する方法がとられる。しかし、上記の宣言を見てもわかるように、gets には入力される文字列の長さを制限する機能が存在しない。
以上、gets を用いるとバッファオーバーランを防ぐ手段はないため gets は実用的なプログラミングでは絶対に使用してはならない関数とされており、実際に2011年に行われた改定(ISO/IEC 9899:2011、通称C11)で廃止された。POSIX.1-2008では廃止予定の分類である。例えばGCCでは、getsを使用するプログラムをコンパイルすると「the `gets' function is dangerous and should not be used. ('gets' 関数は危険なため使うべきではありません。)」と警告される。
代替策
gets の使用を停止し、以下の関数に置き換えることが考えられる。
- fgets 関数
- gets と末尾の改行文字の扱いが異なるため単純に gets を fgets で置き換えることは出来ない。具体的な置き換え方法は fgets の項が詳しい。
- gets_s 関数
- C11で追加されたが、C11において実装が必須ではないため必ずしも利用可能とは限らない。
- getline 関数
- POSIX 2008で追加された。stdio.h のヘッダに含まれるが使用には _GNU_SOURCE を define する必要がある。libc 4.6.27以降で使用可能。
関連項目
脚注
- ^ “N1570 Committee Draft ISO/IEC 9899:201x Programming languages C (PDF)” (英語). p. xiii. 2012年3月30日閲覧。 “removed the gets function (<stdio.h>)”
- ^ http://www.kouno.jp/home/c_faq/c12.html#18
外部リンク
- JM Project Linux Library Functions マニュアル –
|
GETS (2006年 - )
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/13 19:37 UTC 版)
「ビッグ・アスホールズ」の記事における「GETS (2006年 - )」の解説
※この「GETS (2006年 - )」の解説は、「ビッグ・アスホールズ」の解説の一部です。
「GETS (2006年 - )」を含む「ビッグ・アスホールズ」の記事については、「ビッグ・アスホールズ」の概要を参照ください。
固有名詞の分類
- Getsのページへのリンク