C6057
Actualización: noviembre 2007
C6057
Advertencia C6057: Saturación de búfer debido al número de caracteres y número de bytes que no coinciden en la llamada a <función>
Esta advertencia indica que a una función que espera el número de caracteres se está pasando en su lugar el número de bytes. Con los caracteres anchos (Unicode) los valores son diferentes. Este defecto puede producir una saturación del búfer explotable o un bloqueo.
Una causa común de este defecto es el uso de sizeof en una matriz de caracteres. El operador sizeof siempre calcula el número de bytes; para los caracteres ANSI es igual que el número de caracteres, pero para los caracteres Unicode es el doble del número de caracteres.
Habitualmente es seguro calcular el número de elementos de una matriz dividiendo el tamaño de la matriz por el tamaño de cada elemento.
Ejemplo
El código siguiente genera esta advertencia si se compila utilizando el juego 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 corregir esta advertencia, divida el tamaño de la matriz por el tamaño del elemento, como se muestra en el código siguiente:
#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 obtener información sobre cómo utilizar el juego de caracteres Unicode en Visual C++, vea Página de propiedades General (Proyecto).