C6057
警告 C6057: <function> 呼叫中的字元數/位元組數不符,因而造成緩衝區滿溢
這則警告表示將位元組數傳遞給需要有字元數的函式。 而寬 (Unicode) 字元的值會不同。 這項缺失可能會造成可利用的緩衝區滿溢或損毀。
這項缺失的一般原因是在字元陣列上使用 sizeof。 sizeof 運算子一律會計算位元組數,若為 ANSI 字元,則這會與字元的數目相同,但是若為 Unicode 字元,則會是字元數的兩倍。
安全的做法是將陣列大小除以每個元素的大小,以計算陣列中的元素數目。
範例
如果是使用 Unicode 字元集 (Character Set) 編譯下列程式碼,則會產生這則警告:
#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...
}
}
若要更正這則警告,請將陣列大小除以元素大小,如下列程式碼所示:
#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...
}
}
如需如何在 Visual C++ 中使用 Unicode 字元集的詳細資訊,請參閱一般屬性頁 (專案)。 如需 LoadString 的詳細資訊,請參閱 LoadString 函式 (英文)