C6057
Aviso C6057: devido ao número de caracteres/número de incompatibilidade de bytes na chamada para <function> de saturação de buffer
Este aviso indica que uma função que espera que o número de caracteres está sendo passada o número de bytes em vez disso. Com caracteres de largura (Unicode), os valores são diferentes. Esse defeito pode causar uma saturação de buffer explorável ou falha.
Uma causa comum deste defeito está usando sizeof em uma matriz de caracteres. O sizeof operador sempre calcula o número de bytes; para caracteres ANSI é o mesmo que o número de caracteres, mas para caracteres Unicode é duas vezes o número de caracteres.
Geralmente é seguro calcular o número de elementos em uma matriz, dividindo o tamanho da matriz pelo tamanho de cada elemento.
Exemplo
O código a seguir gera esse aviso se ele é compilado usando o conjunto de caracteres Unicode:
#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...
}
}
Para corrigir esse aviso, divida o tamanho da matriz pelo tamanho do elemento, conforme mostrado no código a seguir:
#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...
}
}
Para obter informações sobre como usar caracteres Unicode configurados no Visual C++, consulte Página de propriedades geral (projeto). Para obter mais informações sobre LoadString, consulte A função de LoadString