Warnung C6053

Der Aufruf von "function" darf keine Zeichenfolge 'variable' null beenden.

Hinweise

Diese Warnung gibt an, dass die angegebene Funktion so aufgerufen wurde, dass die resultierende Zeichenfolge möglicherweise nicht null beendet wird. Dieser Fehler kann zu einem ausnutzenden Pufferüberlauf oder Absturz führen. Diese Warnung wird auch generiert, wenn eine kommentierte Funktion eine null-beendete Zeichenfolge erwartet, aber Sie eine nicht null-beendete Zeichenfolge übergeben.

Die meisten C-Standardbibliotheks- und Win32-Zeichenfolgenbehandlungsfunktionen erfordern und erzeugen Null-beendete Zeichenfolgen. Einige "gezählte Zeichenfolgen"-Funktionen (einschließlich strncpy, , , _mbsncpy_snprintfund snwprintf) erzeugen keine Zeichenfolgen mit Nullen, wenn sie genau ihren Puffer wcsncpyfüllen. In diesem Fall geht ein nachfolgender Aufruf einer Zeichenfolgenfunktion, die erwartet, dass eine Zeichenfolge mit Null über das Ende des Puffers hinausgeht, der nach der Null sucht. Das Programm sollte sicherstellen, dass die Zeichenfolge mit einer Null endet. Im Allgemeinen sollten Sie eine Länge an die Funktion "Zeichenfolge gezählt" übergeben, die kleiner als die Größe des Puffers ist, und weisen Dann explizit dem letzten Zeichen im Puffer Null zu.

Codeanalysename: MISSING_ZERO_TERMINATION1

Beispiele

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, beenden Sie die Zeichenfolge null, wie im folgenden Beispielcode gezeigt:

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

Der folgende Beispielcode korrigiert diese Warnung mithilfe der Funktion für sichere Zeichenfolgenmanipulation strncpy_s :

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

Heuristik

Diese Warnung wird manchmal auf bestimmte Idiome gemeldet, die in der Praxis sicher sind. Aufgrund der Häufigkeit und potenziellen Folgen dieses Fehlers ist das Analysetool für das Auffinden potenzieller Probleme anstelle seiner typischen Verzerrungen zur Verringerung des Lärms voreingenommen.

Siehe auch