C6057

Mise à jour : novembre 2007

C6057

Avertissement C6057 : dépassement de mémoire tampon lié au nombre de caractères/nombre d'octets incompatible dans l'appel à <fonction>

Cet avertissement indique que le nombre d'octets est passé à une fonction qui attend le nombre de caractères. Avec les caractères larges (Unicode), les valeurs sont différentes. Ce défaut peut provoquer un blocage ou un dépassement de mémoire tampon exploitable.

Ce défaut est généralement dû à l'utilisation de sizeof sur un tableau de caractères. L'opérateur sizeof calcule toujours le nombre d'octets ; ce nombre correspond au nombre de caractères pour les caractères ANSI, mais il représente deux fois le nombre de caractères pour les caractères Unicode.

Il est généralement recommandé de calculer le nombre d'éléments contenus dans un tableau en divisant la taille du tableau par celle de chaque élément.

Exemple

Le code suivant génère cet avertissement s'il est compilé à l'aide du jeu de caractères 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...
  }
}

Pour corriger cet avertissement, divisez la taille du tableau par la taille de l'élément, comme indiqué dans le code suivant :

#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...
  }
}

Pour plus d'informations sur l'utilisation du jeu de caractères Unicode en Visual C++, consultez Général, page de propriétés (Projet).

Voir aussi

Autres ressources

LoadString