C6209
Warnung C6209: Verwendung von 'sizeof<Variable1>' als <Nummer>-Parameter im Aufruf von <Funktion>, wobei <Variable2> ein Array von Breitzeichen sein kann. Wollten Sie die Zeichenanzahl anstelle der Byteanzahl verwenden?
Diese Warnung gibt an, dass es sich bei einem Parameter in einem Funktionsaufruf fälschlicherweise um eine Byteanzahl anstelle einer Zeichenanzahl handelt. Wenn dies so ist, kann dieser Fehler zu Speicherschäden oder einem Programmabsturz, in einigen Fällen auch zu einer ausnutzbaren Sicherheitslücke führen.
Eine häufige Ursache für diesen Fehler ist die Verwendung von sizeof für ein Zeichenarray. Der Operator sizeof berechnet immer die Byteanzahl. Bei ANSI-Zeichen ist diese Anzahl identisch mit der Zeichenanzahl; bei Unicode-Zeichen hingegen ist es die doppelte Zeichenanzahl.
Normalerweise kann die Anzahl der Elemente in einem Array gefahrlos berechnet werden, indem die Größe des Arrays durch die Größe der einzelnen Elemente dividiert wird.
Diese Warnung wird unter folgenden Gegebenheiten generiert:
Eine Variable wird als ein Parameter übergeben und sizeof für diese Variable als ein anderer Parameter.
Sowohl der Variablentyp als auch der formale Parametertyp ist eine Variante eines Zeigers auf eine Doppelbytezeichenfolge.
Beispiel
Im folgenden Beispielcode wird diese Warnung generiert, da sizeofpC an die my_wcsncpy-Funktion übergeben wird:
#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);
void f( )
{
WCHAR pC[15];
wchar_t* input = L"Hello, World!";
my_wcsncpy(pC, input, sizeof pC);
// code ...
}
Um diese Warnung zu korrigieren, übergeben Sie die korrekte Größe, wie im folgenden Code dargestellt:
#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);
void f( )
{
WCHAR pC[15];
wchar_t* input = L"Hello, World!";
my_wcsncpy(pC, input, (sizeof pC) / (sizeof pC[0]));
// code ...
}
Bei bestimmten Codierungsstilen kann die verwendete Heuristik falsch sein; daher bezieht sich diese Warnung möglicherweise nicht auf einen tatsächlichen Fehler im Code.