Sdílet prostřednictvím


C6260

upozornění C6260: hodnota sizeof * sizeof je téměř vždy nesprávná, měl být použit počet znaků nebo bajtů?

Toto upozornění naznačuje, že výsledky dvou operací sizeof byly společně násobeny.C/C++ operátor sizeof vrací počet bajtů úložiště, které objekt používá.Je obvykle nesprávné vynásobit tuto hodnotu jinou operací sizeof; obvykle je očekávaná hodnota počet bajtů v objektu nebo počet prvků pole (například počet širokých znaků v poli).

Existuje určité neintuitivní chování spojené s operátorem sizeof.Například v C, lze použít sizeof ('\0') == 4,, protože znak je celočíselného typu.V jazyce C++ je znakový literál typu char, tedy sizeof ('\0') == 1.Avšak v C i C++ platí následující:

sizeof ("\0") == 2. 

Příklad

Následující kód generuje toto upozornění:

#include <windows.h>

void f( )
{
  int i;
  i = sizeof (L"String") * sizeof (WCHAR);
  // code ...
}

Pro opravu tohoto upozornění použijte následující kód:

#include <windows.h>

void f( )
{
  int i;
  i= sizeof (L"String") / sizeof (WCHAR);
  
  /* or to get bytes */
  i = sizeof (L"String");
  // code ...
}

Viz také

Referenční dokumentace

sizeof – operátor

sizeof – operátor (C)