Udostępnij za pośrednictwem


C6260

Ostrzeżenie C6260: sizeof * sizeof prawie zawsze jest niewłaściwy, czy ma być używana liczba znaków lub liczbę bajtów?

To ostrzeżenie wskazuje, że wyniki dwóch sizeof operacji są przemnażane razem.C/C++ sizeof operator zwraca liczbę bajtów pamięci używa obiektu.Zazwyczaj niepoprawne należy pomnożyć go przez inną jest sizeof operacji; Zazwyczaj jeden jest zainteresowany liczba bajtów w obiekcie lub liczba elementów w tablicy (na przykład liczba wide znaków w tablicy).

Istnieje kilka unintuitive zachowanie związane z sizeof operatora.Na przykład w C sizeof ('\0') == 4, , ponieważ znak jest typem całkowitym.W języku C++ jest typu literał znakowy char, więc sizeof ('\0') == 1.Jednakże w c i C++ są spełnione następujące:

sizeof ("\0") == 2. 

Przykład

Poniższy kod generuje ostrzeżenie to:

#include <windows.h>

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

Aby poprawić to ostrzeżenie, należy użyć następującego kodu:

#include <windows.h>

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

Zobacz też

Informacje

Operatora sizeof

sizeof operatora (C)