C6053
Warnung C6053: Durch den Aufruf von <Funktion> wird die Zeichenfolge <Variable> möglicherweise nicht mit 0 (null) beendet.
Diese Warnung gibt an, dass die angegebene Funktion auf eine Weise aufgerufen wurde, dass die sich ergebende Zeichenfolge möglicherweise nicht mit 0 (null) endet.Dieser Fehler kann einen als Angriffspunkt geeigneten Pufferüberlauf oder einen Absturz verursachen.Diese Warnung wird auch generiert, wenn eine Funktion mit Anmerkungen erwartet, dass einer NULL beendeten Zeichenfolge eine Zeichenfolge übergeben wird, die nicht beendet NULL ist.
Die meisten Funktionen zur Zeichenfolgenbehandlung in der C-Standardbibliothek und Win32 erfordern und erstellen Zeichenfolgen, die mit 0 (null) enden.Einige Counted String-Funktionen (u. a. strncpy, wcsncpy, _mbsncpy, _snprintf und snwprintf) erstellen keine Zeichenfolgen, die mit 0 (null) enden, wenn sie den zugehörigen Puffer exakt füllen.In diesem Fall geht ein nachfolgender Aufruf einer Zeichenfolgenfunktion, die eine Zeichenfolge erwartet, die mit 0 (null) endet, auf der Suche nach der 0 (null) über das Ende des Puffers hinaus.Das Programm sollte sicherstellen, dass die Zeichenfolge mit einer 0 (null) endet.Im Allgemeinen sollten Sie eine Länge an die Funktion übergeben eine "der gezählten Zeichenfolge", die des Puffers und null kleiner als die Größe ist dann dem letzten Zeichen im Puffer explizit, zuweisen.
Beispiel
Im folgenden Beispielcode wird diese Warnung generiert:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX);
return strlen(szDest); // possible crash here
}
Um diese Warnung zu korrigieren, lassen Sie die Zeichenfolge mit einer 0 (null) enden, wie im folgenden Beispielcode dargestellt:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX-1);
szDest[MAX-1]=0;
return strlen(szDest);
}
Im folgenden Beispielcode wird diese Warnung mithilfe der strncpy_s-Funktion zur sicheren Zeichenfolgenbearbeitung korrigiert:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource= "Hello, World!";
strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));
return strlen(szDest);
}
Diese Warnung wird manchmal bei bestimmten Ausdrücken generiert, die sich eigentlich in der Praxis bewährt haben.Aufgrund der Häufigkeit und der möglichen Folgen dieses Fehlers ist das Analysetool eher darauf ausgerichtet, potenzielle Probleme zu finden, als auf das sonst typische Reduzieren von Störungen.
Siehe auch
Referenz
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l