Surcharges sécurisées de modèle
De nombreuses fonctions CRT ont été déconseillées en faveur de les versions plus récentes et sécurité-améliorées (par exemple, strcpy_s est le plus remplacement sécurisé pour strcpy).Le CRT fournit des surcharges de modèle permettant à faciliter la transition vers des variants plus sécurisées.
Par exemple, ce code génère un avertissement car strcpy est déconseillé :
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
vous pouvez ignorer l'avertissement.Définissez le symbole _CRT_SECURE_NO_WARNINGS pour supprimer cet avertissement, ou mettre à jour le code pour utiliser strcpy_s:
char szBuf[10];
strcpy_s(szBuf, 10, "test"); // security-enhanced _s function
Les surcharges de modèle fournissent des options supplémentaires.Définir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES à 1 propose des surcharges de modèle du CRT standard fonctions qui appellent les plus de variants sécurisées automatiquement.Si _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES est 1, aucune modification du code n'est nécessaire.En arrière-plan, l'appel à strcpy sera remplacé par un appel à strcpy_s avec l'argument de taille fournie automatiquement.
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char szBuf[10];
strcpy(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES n'affecte pas les fonctions qui prennent un nombre, tel qu' strncpy.pour activer des surcharges de modèle pour les fonctions de nombre, définissez _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT à 1.Avant de cela, toutefois, vérifiez que votre code passe le nombre de caractères, pas la taille de la mémoire tampon (une erreur courante).En outre, le code qui écrit explicitement une marque de fin null à la fin de la mémoire tampon après l'appel de fonctions est inutile si la variante sécurisée est appelée.Si vous avez besoin d'un comportement de troncation, consultez _TRUNCATE.
[!REMARQUE]
Macro _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT requiert qu' _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES est également la valeur 1.Si _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT est défini comme 1 et _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES a la valeur 0, l'application ne s'exécutera pas de surcharges de modèle.
Définir _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES à 1 active des surcharges de modèle des variantes sécurisées (noms se terminent par « _s »).Dans ce cas, si _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES est 1, puis une petite modification doit être effectuée au code d'origine :
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char szBuf[10];
strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
Seul le nom de la fonction doit être modifié (en ajoutant des « _s ») ; la surcharge de modèle prend charge de fournir l'argument de taille.
Par défaut, _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES et _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT sont définis comme 0 (désactivé) et _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES a la valeur 1 (coché).
Notez que ces surcharges de modèle fonctionnent uniquement pour les tableaux statiques.Les mémoires tampons allocation dynamique requièrent des modifications supplémentaires de code source.Réviser les exemples ci-dessus :
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy(szBuf, "test"); // still deprecated; have to change to
// strcpy_s(szBuf, 10, "test");
Et suit :
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy_s(szBuf, "test"); // doesn't compile; have to change to
// strcpy_s(szBuf, 10, "test");
Voir aussi
Référence
Fonctionnalités de bibliothèque CRT