Warnung C6260
sizeof
*sizeof
ist fast immer falsch, haben Sie beabsichtigen, eine Zeichenanzahl oder eine Byteanzahl zu verwenden?
Diese Warnung gibt an, dass die Ergebnisse von zwei sizeof
Vorgängen miteinander multipliziert wurden.
Hinweise
Der C/C++ sizeof
-Operator gibt die Anzahl der Bytes des Speichers zurück, den ein Objekt verwendet. Es ist in der Regel falsch, sie mit einem anderen sizeof
Vorgang zu multiplizieren. In der Regel interessieren Sie sich für die Anzahl der Bytes in einem Objekt oder die Anzahl der Elemente in einem Array (z. B. die Anzahl von Breitzeichen in einem Array).
Es gibt ein unintuitives Verhalten, das dem sizeof
Operator zugeordnet ist. Beispielsweise in C, sizeof ('\0') == 4
weil ein Zeichen von einem integralen Typ ist. In C++ lautet char
der Typ eines Zeichenliterals , also sizeof ('\0') == 1
. In C und C++ gilt jedoch die folgende Beziehung:
sizeof ("\0") == 2
Codeanalysename: USEOFBYTEAREA
Beispiel
Der folgende Code generiert diese Warnung:
#include <windows.h>
void f( )
{
int i;
i = sizeof (L"String") * sizeof (WCHAR);
// code ...
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <windows.h>
void f( )
{
// use divide to calculate how many WCHAR characters are in the string
int i = sizeof (L"String") / sizeof (WCHAR);
// get the number of bytes in the character array
int j = sizeof (L"String");
// code ...
}