Поделиться через


C6057

Обновлен: Ноябрь 2007

C6057

Предупреждение C6057. Переполнение буфера из-за несоответствия числа символов и числа байт при вызове <функция>

Данное предупреждение означает, что в функцию, для которой требуется число знаков, передается количество байтов. При использовании двухбайтовых знаков (знаков Юникода) эти значения отличаются. Эта неполадка может привести к переполнению буфера или сбою.

Наиболее распространенной причиной этой ошибки является использование sizeof для массива знаков. Оператор sizeof всегда вычисляет количество байтов; в случае использования кодировки ANSI это значение совпадает с количеством знаков, однако для Юникода оно вдвое превышает количество знаков.

Как правило, более безопасно вычислять количество элементов массива, разделив размер массива на размер каждого элемента.

Пример

В следующем коде при компиляции с использованием кодировки Юникода создается данное предупреждение:

#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++ см. в разделе Страница свойств "Общие" (проект).

См. также

Другие ресурсы

LoadString