Partager via


C6059

avertissement C6059 : paramètre de longueur incorrect dans l'appel à <fonction>. Passez le nombre de caractères restants, pas la taille de mémoire tampon de <variable>

Cet avertissement indique qu'un appel à une fonction de concaténation de chaînes passe probablement une valeur incorrecte pour le nombre de caractères à concaténer. Ce défaut peut provoquer un blocage ou un dépassement de mémoire tampon exploitable. Il est généralement dû au passage de la taille de la mémoire tampon, au lieu du nombre restant de caractères dans la mémoire tampon, à la fonction de manipulation de chaînes.

Exemple

Le code suivant génère cet avertissement :

#include <string.h>
#define MAX 25

void f( )
{
  char szTarget[MAX];
  char *szState ="Washington";
  char *szCity="Redmond, ";

  strncpy(szTarget,szCity, MAX);
  szTarget[MAX -1] = '\0';
  strncat(szTarget, szState, MAX); //wrong size 
  // code ...                                 
}

Pour corriger cet avertissement, utilisez le nombre correct de caractères à concaténer, comme indiqué dans le code suivant :

#include <string.h>
#define MAX 25

void f( )
{
  char szTarget[MAX];
  char *szState ="Washington";
  char *szCity="Redmond, ";

  strncpy(szTarget,szCity, MAX);
  szTarget[MAX -1] = '\0';
  strncat(szTarget, szState, MAX - strlen(szTarget)); // correct size 
  // code ...                                 
}

Pour corriger cet avertissement à l'aide de la fonction de manipulation de chaînes sécurisée, consultez le code suivant :

#include <string.h>

void f( )
{
  char *szState ="Washington";
  char *szCity="Redmond, ";

  size_t nTargetSize = strlen(szState) + strlen(szCity) + 1;
  char *szTarget= new char[nTargetSize];

  strncpy_s(szTarget, nTargetSize, szCity,strlen(szCity));
  strncat_s(szTarget, nTargetSize, szState,
                    nTargetSize - strlen(szTarget));
  // code ...
  delete [] szTarget;
}

Voir aussi

Référence

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l