Partilhar via


C6057

Aviso C6057: saturação devido ao número de caracteres/número de bytes incompatibilidade na telefonar para <função>de buffer

Este aviso indica que uma função que espera que o número de caracteres que 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 falhar.

Uma causa comum desse defeito está utilizando sizeof em uma matriz de caractere. The sizeof operador sempre calcula o número de bytes; para caracteres ANSI, esta é a mesma sistema autônomo 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 dimensionar da matriz pelo dimensionar de cada elemento.

Exemplo

O código a seguir gera esse aviso se ele é compilado usando o Unicode conjunto de caractere:

#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 dimensionar da matriz pelo dimensionar do elemento, sistema autônomo mostra o 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 o conjunto no Visual C++ de caractere Unicode, consulte Página de propriedades Geral (projeto).

Consulte também

Outros recursos

LoadString