scanfのエラー

Visual Studioでscanfを使うと変なエラーがでる。

どうもscanfは危険な関数だから使わないほうがいいよという警告らしい。

Visual Studioでは

# define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

みたいに書かないといけないようです。

詳しくは理解できませんが、scanfは指定したサイズを超えて読み込む恐れがあるみたです。

4 thoughts on “scanfのエラー

  1. scanfの問題点は色々ありますが、おっしゃるとおり、
    一番はバッファオーバーランが出来てしまうことでしょうか?

    危険なコード
    ———–
    char a[20];
    scanf(“%s”, a);
    ———–
    私もしっかり理解しているわけではないですが、これは、
    20文字以上入力することでスタック領域を破壊して別のコードを実行させることが可能になります。

    ただ、scanfも色々工夫すれば、防げるようです。
    http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html

    Microsoft製品でしたら、scanf_s() を使ったほうが良いみたいですね。

    • そうなんですね!

      まだまだ本業の合間に勉強してる最中なので意味がわからないことも
      沢山あります(;´∀`)

      数式とか昔に戻ったみたいです。もっと頑張りたいと思います。

  2. こんにちは。初めまして。
    tsurujirospark です。
    A級プログラマーへの道 のブログを書いています。
    僕はC言語はもうベテランの域なので、何でも気軽に聞いてくださいね。
    それでは、今後ともよろしくお願いします。

オジサン にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*