C6057
Warnung C6057: Pufferüberlauf aufgrund einer nicht übereinstimmenden Anzahl von Zeichen/Bytes im Aufruf von <Funktion>
Diese Warnung gibt an, dass an eine Funktion, die eine Zeichenanzahl erwartet, stattdessen eine Anzahl von Bytes übergeben wird. Bei Breitzeichen (Unicode) gelten andere Werte. Dieser Fehler kann einen als Angriffspunkt geeigneten Pufferüberlauf oder einen Absturz verursachen.
Eine häufige Ursache für diesen Fehler ist die Verwendung von sizeof für ein Zeichenarray. Der Operator sizeof berechnet immer die Anzahl der Bytes. Diese stimmt bei ANSI-Zeichen mit der Zeichenanzahl überein, entspricht bei Unicode-Zeichen jedoch der doppelten Zeichenanzahl.
Normalerweise kann die Anzahl der Elemente in einem Array gefahrlos berechnet werden, indem die Größe des Arrays durch die Größe der einzelnen Elemente dividiert wird.
Beispiel
Der folgende Code generiert diese Warnung, wenn er mit dem Unicode-Zeichensatz kompiliert wird:
#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...
}
}
Dividieren Sie zum Korrigieren dieser Warnung die Größe des Arrays durch die Größe des Elements, wie im folgenden Code dargestellt:
#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...
}
}
Informationen zur Verwendung des Unicode-Zeichensatzes in Visual C++ finden Sie unter Eigenschaftenseite "Allgemein" (Projekt). Weitere Informationen zu LoadString finden Sie unter der LoadString-Funktion.