共用方式為


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 函式 (英文)