Condividi tramite


C6209

avviso C6209: utilizzo di 'sizeof<variabile1>' come parametro <numero> nella chiamata a <funzione> dove <variabile2> potrebbe essere una matrice di caratteri di tipo "wide". Si intendeva utilizzare il conteggio di caratteri invece del conteggio di byte?

L'avviso indica che un parametro a una chiamata a funzione potrebbe erroneamente essere un conteggio di byte invece che un conteggio di caratteri. In tal caso, l'errore potrebbe causare un arresto anomalo o un danneggiamento, anche se in alcune situazioni è possibile che si verifichi un problema di sicurezza.

Una causa comune dell'errore è l'utilizzo di sizeof su una matrice di caratteri. L'operatore sizeof calcola sempre il numero di byte. Per i caratteri ANSI, il numero dei byte è uguale al numero di caratteri, mentre per Unicode è doppio rispetto al numero dei caratteri.

Generalmente è consigliabile calcolare il numero di elementi di una matrice dividendo la dimensione della matrice per la dimensione di ciascun elemento.

L'avviso viene generato quando:

  • Una variabile viene passata come parametro e sizeof della variabile viene passato come altro parametro.

  • Sia il tipo di variabile che il tipo di parametro formale sono varietà di puntatore-a-carattere di tipo "wide".

Esempio

Nell'esempio di codice riportato di seguito l'avviso viene generato quando sizeof pC viene passato alla funzione my_wcsncpy:

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

Per risolvere il problema, passare la dimensione corretta come illustrato nel codice seguente:

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

Si noti che l'euristica utilizzata potrebbe non essere corretta per alcuni stili di codifica, pertanto questo avviso potrebbe non corrispondere a un errore vero e proprio nel codice.

Vedere anche

Riferimenti

sizeof Operator

sizeof Operator (C)