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