[C言語]ゲッツ(gets)はダメ。fgetsが正しい。

カテゴリ: Linux / author: uechoco / 2010年01月12日 00:17:48
この記事を読む時間:58くらい

C言語にはいろいろな関数があるが、中にはセキュリティ上使用してはならないと指定されているものもある。

ファイル読み込みで使われるgets()関数もそうだ。仕様上バッファオーバーランが発生してしまうらしい。名前からして使ったらプログラムが滑って空気が寒くなりそうだw

scanf()も通常の使用だとバッファオーバーランが発生してしまうらしい。

スマートに解決するならばfgets()関数がいいらしい。

危ないから外してくれればいいのにとも思うけど、そちらは言語仕様なので関数がなくなることはないでしょう。コンパイラが警告してくれるとかがあるかもしれません。

というわけで、gets()は寒いからダメ。fgets()を使おうという話。


2件のコメント »

  1. コメント by massy — 2010 年 1 月 12 日 @ 10 : 26 : 53

    uechocoさんの読み通り、gets等を記述したコードをVisual C++ 2005以降でコンパイルすると、「代わりの関数用意してあるからそれ使え」と怒られます。
    でも代わりの関数を使うとコードのポータビリティがなくなるので、ターゲットがwinしか有り得ないときだけしか使わないですね。

  2. コメント by uechoco — 2010 年 1 月 12 日 @ 10 : 51 : 05

    なるほどー。IDE便利ですね。OSの違いは面倒だ。
    「代わりのギャグを用意してあるからそれ使え」だと面白いかも(ぇ

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.