Warnung C6059
Falscher Längenparameter beim Aufruf von "function". Übergeben Sie die Anzahl der neu Standard Zeichen, nicht die Puffergröße von "Variable".
Hinweise
Diese Warnung gibt an, dass ein Aufruf einer Zeichenfolgenverkettungsfunktion wahrscheinlich einen falschen Wert für die Anzahl der Zeichen übergibt, die verkettet werden sollen. Dieser Fehler kann zu einem ausnutzenden Pufferüberlauf oder Absturz führen. Eine häufige Ursache für diesen Fehler ist das Übergeben der Puffergröße (anstelle der neu Standard Anzahl von Zeichen im Puffer) an die Zeichenfolgenmanipulationsfunktion.
Diese Warnung hilft beim Identifizieren des häufig auftretenden Fehlers beim Senden der Größe des Zielpuffers anstelle der Größe der Daten. Dies geschieht, indem erkannt wird, wann die größe, die zum Zuordnen des Puffers verwendet wird, unverändert an die Funktion übergeben wird, die Daten in den Puffer eingibt.
Codeanalysename: BAD_CONCATENATION
Beispiel
Der folgende Code generiert Warnung C6059:
#include <string.h>
#define MAX 25
void f( )
{
char szTarget[MAX];
const char *szState ="Washington";
const char *szCity="Redmond, ";
strncpy(szTarget, szCity, MAX);
szTarget[MAX -1] = '\0';
strncat(szTarget, szState, MAX); // wrong size
// code ...
}
Um diese Warnung zu korrigieren, verwenden Sie die richtige Anzahl von Zeichen, um zu verketten, wie im folgenden Code gezeigt:
#include <string.h>
#define MAX 25
void f( )
{
char szTarget[MAX];
const char *szState ="Washington";
const char *szCity="Redmond, ";
strncpy(szTarget, szCity, MAX);
szTarget[MAX -1] = '\0';
strncat(szTarget, szState, MAX - strlen(szTarget)); // correct size
// code ...
}
Informationen zum Korrigieren dieser Warnung mithilfe der Funktionen strncpy_s
für die sichere Zeichenfolgenmanipulation und strncat_s
den folgenden Code finden Sie im folgenden Code:
#include <string.h>
void f( )
{
const char *szState ="Washington";
const char *szCity="Redmond, ";
size_t nTargetSize = strlen(szState) + strlen(szCity) + 1;
char *szTarget= new char[nTargetSize];
strncpy_s(szTarget, nTargetSize, szCity, strlen(szCity));
strncat_s(szTarget, nTargetSize, szState,
nTargetSize - strlen(szTarget));
// code ...
delete [] szTarget;
}
Heuristik
Diese Analyse erkennt, wenn die Zielpuffergröße nicht in den Längenparameter der Zeichenfolgenmanipulationsfunktion übergeben wird. Diese Warnung wird nicht angegeben, wenn ein anderer Wert als Längenparameter übergeben wird, auch wenn dieser Wert falsch ist.
Beachten Sie den folgenden Code, der warnungscodierten C6059 generiert:
#include <string.h>
#define MAX 25
void f( )
{
char szTarget[MAX];
const char *szState ="Washington";
const char *szCity="Redmond, ";
strncpy(szTarget, szCity, MAX);
szTarget[MAX -1] = '\0';
strncat(szTarget, szState, MAX); // wrong size
// code ...
}
Die Warnung geht weg, indem Sie das MAX
Argument strncat
MAX - 1
in "" ändern, obwohl die Längenberechnung noch falsch ist.
#include <string.h>
#define MAX 25
void f( )
{
char szTarget[MAX];
const char *szState ="Washington";
const char *szCity="Redmond, ";
strncpy(szTarget, szCity, MAX);
szTarget[MAX -1] = '\0';
strncat(szTarget, szState, MAX - 1); // wrong size, but no warning
// code ...
}