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

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

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

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

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

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

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

About: uechoco


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

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

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

Comments are closed.