- blogs:
- cles::blog

Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは


Visual Studio 2017/2019 を使って C 言語の入門書の問題をコンパイルしていると、scanf() が動かなくて困ることがあります。
例えば以下のような、文字列を読み取るコードをコンパイルすると C4996*1 というエラーになります。このような Visual Studio (というか、VC++ のコンパイラ) の挙動についてはC 言語を始めたばかりの初学者にとっては大きな障害となります。ただ、VC++ がこのような仕様になっているのは、初心者にとって scanf() の取り扱いは難しく、バッファオーバーランを起こしやすい問題を考えると仕方がない面もあります。
C4996エラーの例:
† ポイントは SDL チェックの有無
前述の C4996 エラーについては Visual Studio のセキュリティ開発サイクル(SDL)チェックで制御されているので、入門書の練習問題を解くなど、脆弱性について考慮しなくて良い場合にはこのチェックを外すことでコンパイルが可能です。SDL チェックの詳細については「/sdl (追加のセキュリティ チェックの有効化)」に記載されているので、詳細に知りたい場合にはこちらを参照してください。
設定変更の具体的な方法はプロジェクトのプロパティを開いて「C/C++」→「全般」にある「SDL チェック」 を無効化してやります。
† 新規のプロジェクトを作るときは・・・・
ちなみに新規のプロジェクトを作成するときに SDL チェックをしないようにする場合には、新規プロジェクトを作成するときに Visual C++ → Windows デスクトップ → Windows デスクトップウィザード を選択してやると、以下の画像のようにウィザードの最後に 「セキュリティ開発サイクル(SDL)チェック」が現れるので、このチェックを外してやれば OK です。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10212
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(1403)
3 . RDP のプロトコルを TCP だけに変更する(1142)
4 . Flash Player projector を使って .swf をスタンドアローンで再生する(1010)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(976)