web-dev-qa-db-ja.com

_CRT_SECURE_NO_WARNINGSの使用方法

ウィザードから生成されたシンプルな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番目のプロジェクトが問題なくコンパイルされるのか?

40
vico

で追加

構成プロパティ>> C/C++ >>プリプロセッサ>>プリプロセッサ定義>> _CRT_SECURE_NO_WARNINGS

screenshot of the relevant config interface

45
Balu

「プロジェクト->プロパティ-> C/C++->プリプロセッサ->プリプロセッサ定義」の下に、_CRT_SECURE_NO_WARNINGSを追加します

81
nexusclarum

Visual Studio 2012以降を使用している場合、[プロパティページ]-> [C/C++]-> [全般]に[SDLチェック]設定が追加されています。

追加のセキュリティ開発ライフサイクル(SDL)推奨チェック。追加の安全なコード生成機能と、セキュリティ関連の警告をエラーとして有効にすることが含まれます。

デフォルトはYESです-理由により、安全なバージョンのstrncpyを使用する必要があります。これをNOに変更すると、安全でないバージョンを使用してもエラーは発生しません。

vs2012以降のSDLチェック

22
kmcnamee

_CRT_SECURE_NO_WARNINGSProject-> Properties-> C/C++-> Preprocessor-> Preprocessor Definitionsに追加してもうまくいきませんでした。理由はわかりません。

次のヒントが機能します。stdafx.hファイルに、追加してください

#define _CRT_SECURE_NO_DEPRECATE

他のヘッダーファイルをインクルードする前。

2
user2703790

簡単な修正またはテストのために、すべての#includeの前にファイルの先頭に#define _CRT_SECURE_NO_WARNINGSを追加すると便利です

#define _CRT_SECURE_NO_WARNINGS
#include ...
int main(){
    //...
}
1
Carlosio