Condividi tramite


Avviso C6260

sizeof * sizeof è quasi sempre sbagliato, hai intenzione di usare un conteggio dei caratteri o un conteggio dei byte?

Questo avviso indica che i risultati di due sizeof operazioni sono stati moltiplicati insieme.

Osservazioni:

L'operatore C/C++ sizeof restituisce il numero di byte utilizzati da un oggetto di archiviazione. In genere non è corretto moltiplicarlo per un'altra sizeof operazione. In genere, si è interessati al numero di byte in un oggetto o al numero di elementi in una matrice, ad esempio il numero di caratteri wide in una matrice.

Esiste un comportamento poco intuitivo associato all'operatore sizeof . Ad esempio, in C, sizeof ('\0') == 4, perché un carattere è di un tipo integrale. In C++, il tipo di un valore letterale carattere è char, quindi sizeof ('\0') == 1. Tuttavia, sia in C che in C++, la relazione seguente è vera:

sizeof ("\0") == 2

Nome dell'analisi del codice: USEOFBYTEAREA

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>

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

Per correggere questo avviso, usare il codice seguente:

#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 ...
}

Vedi anche