Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
BLOGTIMES
2018/06/01

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

  visualstudio  c 
このエントリーをはてなブックマークに追加

Visual Studio 2017/2019 を使って C 言語の入門書の問題をコンパイルしていると、scanf() が動かなくて困ることがあります。

例えば以下のような、文字列を読み取るコードをコンパイルすると C4996*1 というエラーになります。このような Visual Studio (というか、VC++ のコンパイラ) の挙動についてはC 言語を始めたばかりの初学者にとっては大きな障害となります。ただ、VC++ がこのような仕様になっているのは、初心者にとって scanf() の取り扱いは難しく、バッファオーバーランを起こしやすい問題を考えると仕方がない面もあります。

#include <stdio.h> int main(void){ char str[100]; scanf("%s", str); printf("%s\n", str); return 0; }

C4996エラーの例:

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Project1 c:\project1\source.cpp 5

ポイントは SDL チェックの有無

前述の C4996 エラーについては Visual Studio のセキュリティ開発サイクル(SDL)チェックで制御されているので、入門書の練習問題を解くなど、脆弱性について考慮しなくて良い場合にはこのチェックを外すことでコンパイルが可能です。SDL チェックの詳細については「/sdl (追加のセキュリティ チェックの有効化)」に記載されているので、詳細に知りたい場合にはこちらを参照してください。

設定変更の具体的な方法はプロジェクトのプロパティを開いて「C/C++」→「全般」にある「SDL チェック」 を無効化してやります。
プロジェクトのプロパティ - Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは

新規のプロジェクトを作るときは・・・・

ちなみに新規のプロジェクトを作成するときに SDL チェックをしないようにする場合には、新規プロジェクトを作成するときに Visual C++ → Windows デスクトップ → Windows デスクトップウィザード を選択してやると、以下の画像のようにウィザードの最後に 「セキュリティ開発サイクル(SDL)チェック」が現れるので、このチェックを外してやれば OK です。

新しいプロジェクト - Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは
Windows デスクトッププロジェクト - Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10212
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン