web-dev-qa-db-fra.com

Comment utiliser _CRT_SECURE_NO_WARNINGS

J'ai une erreur de compilation dans mon application de fenêtre MFC simple générée à partir d'un assistant avec plusieurs lignes de code:

erreur C4996: 'strncpy': cette fonction ou cette variable peut être dangereuse. Pensez à utiliser strncpy_s à la place. Pour désactiver la désapprobation, utilisez _CRT_SECURE_NO_WARNINGS . Voir l'aide en ligne pour plus de détails.

J'ai mis Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

Mais cela n'a pas aidé. J'ai un autre projet très proche qui ne génère qu'un avertissement à cet endroit et il n'a pas de définition _CRT_NONSTDC_NO_WARNINGS.

La seule différence entre les projets est plusieurs options différentes dans l'Assistant.

Pourquoi _CRT_NONSTDC_NO_WARNINGS n'aide-t-il pas le premier projet et pourquoi un second projet compile-t-il sans problème sans cette définition?

37
vico

Ajouter par

Propriétés de configuration >> C/C++ >> Pré-processeur >> Pré-processeur Définitions >> _CRT_SECURE_NO_WARNINGS

screenshot of the relevant config interface

38
Balu

Sous "Projet -> Propriétés -> C/C++ -> Préprocesseur -> Définitions du préprocesseur" add _CRT_SECURE_NO_WARNINGS

78
nexusclarum

Si vous êtes dans Visual Studio 2012 ou une version ultérieure, un paramètre supplémentaire "Vérifications SDL" est disponible sous Pages de propriétés -> C/C++ -> Général.

Vérifications supplémentaires recommandées dans le cycle de développement du développement de la sécurité (SDL); inclut l'activation de fonctionnalités supplémentaires de génération de code sécurisé et d'avertissements supplémentaires relatifs à la sécurité sous forme d'erreurs. 

La valeur par défaut est OUI - Pour une raison, I.E, vous devez utiliser la version sécurisée de la strncpy. Si vous modifiez ceci en NON, vous n'obtiendrez pas d'erreur en utilisant la version non sécurisée.

Contrôles SDL vs2012 et ultérieurs

22
kmcnamee

L'ajout de _CRT_SECURE_NO_WARNINGS à Projet -> Propriétés -> C/C++ -> Préprocesseur -> Définitions du préprocesseur n'a pas fonctionné pour moi. 

Le conseil suivant fonctionne: Dans le fichier stdafx.h, veuillez ajouter "#define_CRT_SECURE_NO_DEPRECATE" avant d'inclure d'autres fichiers d'en-tête.

0
user2703790