C6057
avviso C6057: sovraccarico del buffer a causa della mancata corrispondenza di numero di caratteri/numero di byte nella chiamata a <funzione>
L'avviso indica che a una funzione che prevede di ricevere il numero di caratteri viene invece passato il numero di byte. Con i caratteri estesi (Unicode) i valori sono diversi. Questo problema potrebbe provocare un arresto anomalo o un sovraccarico del buffer.
Una causa comune dell'errore potrebbe essere l'utilizzo di sizeof su una matrice di caratteri. L'operatore sizeof calcola sempre il numero di byte. Nel caso dei caratteri ANSI, tale numero coincide con il numero dei caratteri, mentre per Unicode il numero di byte è 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.
Esempio
Nel codice riportato di seguito l'avviso viene generato se la compilazione viene effettuata con il set di caratteri Unicode:
#include<tchar.h>
#include<windows.h>
void f( HINSTANCE hInst, UINT uID )
{
TCHAR buff[128];
if ( LoadString ( hInst, uID, buff, sizeof buff ) ) // warning C6057
{
// code...
}
}
Per risolvere il problema, dividere la dimensione della matrice per la dimensione dell'elemento, come illustrato nel codice seguente:
#include<tchar.h>
#include<windows.h>
void f(HINSTANCE hInst,UINT uID)
{
TCHAR buff[128];
if( LoadString ( hInst, uID, buff, (sizeof buff)/(sizeof buff[0]) ) )
{
// code...
}
}
Per informazioni su come utilizzare il set di caratteri Unicode in Visual C++, vedere Pagina delle proprietà Generale (Progetto). Per ulteriori informazioni su LoadString, vedere Funzione LoadString