web-dev-qa-db-de.com

So verwenden Sie _CRT_SECURE_NO_WARNINGS

Ich habe einen Kompilierfehler in meiner einfachen MFC-Fensteranwendung, die vom Assistenten mit mehreren Codezeilen generiert wurde:

fehler C4996: 'strncpy': Diese Funktion oder Variable kann unsicher sein. Verwenden Sie stattdessen strncpy_s. Zum Deaktivieren der Abschreibung verwenden Sie _CRT_SECURE_NO_WARNINGS . Weitere Informationen finden Sie in der Online-Hilfe.

Ich setze Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

Das hat aber nicht geholfen. Ich habe ein anderes sehr nahes Projekt, das an dieser Stelle nur eine Warnung generiert und keine _CRT_NONSTDC_NO_WARNINGS-Definition hat.

Der einzige Unterschied zwischen den Projekten sind verschiedene Optionen im Assistenten.

Warum hilft _CRT_NONSTDC_NO_WARNINGS im ersten Projekt nicht und warum wird das zweite Projekt ohne diese Definition ohne Probleme kompiliert?

37
vico

Hinzufügen durch

Konfigurationseigenschaften >> C/C++ >> Präprozessor >> Präprozessor Definitionen >> _CRT_SECURE_NO_WARNINGS

screenshot of the relevant config interface

38
Balu

Fügen Sie unter "Projekt -> Eigenschaften -> C/C++ -> Präprozessor -> Präprozessor-Definitionen" _CRT_SECURE_NO_WARNINGS hinzu

78
nexusclarum

Wenn Sie sich in Visual Studio 2012 oder höher befinden, verfügt dies über eine zusätzliche Einstellung 'SDL prüft' unter Eigenschaftsseiten -> C/C++ -> Allgemein

Zusätzlicher Security Development Lifecycle (SDL) empfohlene Prüfungen; umfasst die Aktivierung zusätzlicher Funktionen zur Erzeugung sicherer Codes und zusätzliche sicherheitsrelevante Warnungen als Fehler. 

Der Standardwert ist YES. Aus einem Grund sollten Sie die sichere Version von strncpy verwenden. Wenn Sie dies in NEIN ändern, wird bei Verwendung der unsicheren Version keine Fehlermeldung angezeigt.

SDL prüft in vs2012 und höher

22
kmcnamee

Für eine schnelle Lösung oder einen Test finde ich es praktisch, nur #define _CRT_SECURE_NO_WARNINGS an den Anfang der Datei, bevor alle #include

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

Hinzufügen von _CRT_SECURE_NO_WARNINGS zu Projekt -> Eigenschaften -> C/C++ -> Präprozessor -> Präprozessordefinitionen hat für mich nicht funktioniert, weiß nicht warum. 

Der folgende Hinweis funktioniert: Fügen Sie in der Datei stdafx.h "#define_CRT_SECURE_NO_DEPRECATE" hinzu, bevor Sie andere Header-Dateien einfügen.

0
user2703790