Freigeben über


Speichern Sie Vorlagen-Überladungen

Viele CRT-Funktionen sind, SECURITY-erhöhten zugunsten der neueren Versionen veraltet (z. B. ist strcpy_s der sicherere Ersatz für strcpy).Die CRT- stellt Vorlagen Operatoren, um den Übergang zu den sichereren Varianten zu erleichtern.

Dieser Code generiert z. B. eine Warnung, weil strcpy veraltet ist:

char szBuf[10];

strcpy(szBuf, "test"); // warning: deprecated

Sie können diese Warnung ignorieren.Definieren Sie das Symbol _CRT_SECURE_NO_WARNINGS , um die Warnung zu unterdrücken, oder aktualisieren Sie den Code, um strcpy_szu verwenden:

char szBuf[10];

strcpy_s(szBuf, 10, "test"); // security-enhanced _s function

Die Vorlagen Operatoren stellen zusätzliche Optionen.Das Definieren von _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES bis 1 aktiviert Standard-CRT von Überladungen Vorlagen, die den sichereren Varianten automatisch aufrufen.Wenn _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 ist, sind keine Änderungen am Code erforderlich.Im Hintergrund wird der Aufruf strcpy zu einem Aufruf von strcpy_s mit dem Argument Größe geändert, das automatisch angegeben wird.

#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 wirkt sich nicht auf die Funktionen, die eine Zahl annehmen, wie strncpy.Um Operatoren Vorlagen für die Anzahl von Funktionen zu aktivieren, definieren Sie _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT bis 1.Vor Fall überprüfen Sie, ob der Code jedoch die Anzahl der Zeichen führt, nicht die Größe des Puffers (ein häufiger Fehler).In Code, der explizit ein NULL-Abschlusszeichen am Ende des Puffers geschrieben wird, nachdem der Funktionsaufruf nicht erforderlich ist, wenn die sichere Variante aufgerufen wird.Wenn Sie das Abschneiden erfordern, finden Sie unter _TRUNCATE.

HinweisHinweis

Makro- _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT erfordert, dass _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES ebenfalls als 1 definiert wird.Wenn _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT definiert wird, während 1 und _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES als 0 definiert ist, führt die Anwendung keine Vorlagen Operatoren aus.

Das Definieren von Vorlagen können bis zu 1 _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES Überladungen der sicheren Varianten (die Namen, „in den _s“ enden).In diesem Fall wenn _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 ist, dann muss eine kleine Änderung an den ursprünglichen Code vorgenommen werden:

#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1

...

char szBuf[10];

strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")

Nur der Name der Funktion muss geändert werden (durch das Hinzufügen von „_s“); Vorlagen werden Überladung sich um Bereitstellen von Größen arguments.

Standardmäßig werden _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES und _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT definiert, wie 0 (deaktiviert) und _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES wird definiert als 1 (aktiviert).

Beachten Sie, dass diese Vorlagen Überladungen nur für statische Arrays arbeiten.Dynamisch zugeordnete Puffer benötigen zusätzliche Änderungen am Quellcode.Die oben aufgeführten Beispiele erneut aufzurufen:

#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");

Und dies:

#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");

Siehe auch

Referenz

CRT-Bibliotheks-Funktionen

Konzepte

Sicherheitsfeatures im CRT