ウィザードから生成されたシンプルなMFCウィンドウアプリケーションで、数行のコードでコンパイルエラーが発生しました。
エラーC4996: 'strncpy':この関数または変数は安全でない可能性があります。代わりにstrncpy_sの使用を検討してください。非推奨を無効にするには、_ CRT_SECURE_NO_WARNINGSを使用。詳細については、オンラインヘルプを参照してください。
Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS
を設定しました
しかし、これは助けにはなりません。この場所で警告のみを生成する別の非常に近いプロジェクトがあり、_CRT_NONSTDC_NO_WARNINGS
定義はありません。
プロジェクト間の唯一の違いは、ウィザードのいくつかの異なるオプションです。
なぜ_CRT_NONSTDC_NO_WARNINGSが最初のプロジェクトで役に立たないのか、なぜこの定義なしで2番目のプロジェクトが問題なくコンパイルされるのか?
で追加
構成プロパティ>> C/C++ >>プリプロセッサ>>プリプロセッサ定義>> _CRT_SECURE_NO_WARNINGS
「プロジェクト->プロパティ-> C/C++->プリプロセッサ->プリプロセッサ定義」の下に、_CRT_SECURE_NO_WARNINGSを追加します
Visual Studio 2012以降を使用している場合、[プロパティページ]-> [C/C++]-> [全般]に[SDLチェック]設定が追加されています。
追加のセキュリティ開発ライフサイクル(SDL)推奨チェック。追加の安全なコード生成機能と、セキュリティ関連の警告をエラーとして有効にすることが含まれます。
デフォルトはYESです-理由により、安全なバージョンのstrncpyを使用する必要があります。これをNOに変更すると、安全でないバージョンを使用してもエラーは発生しません。
_CRT_SECURE_NO_WARNINGS
をProject-> Properties-> C/C++-> Preprocessor-> Preprocessor Definitionsに追加してもうまくいきませんでした。理由はわかりません。
次のヒントが機能します。stdafx.hファイルに、追加してください
#define _CRT_SECURE_NO_DEPRECATE
他のヘッダーファイルをインクルードする前。
簡単な修正またはテストのために、すべての#includeの前にファイルの先頭に#define _CRT_SECURE_NO_WARNINGS
を追加すると便利です
#define _CRT_SECURE_NO_WARNINGS
#include ...
int main(){
//...
}