C6059
advertencia C6059: Parámetro de longitud incorrecta en la llamada a <función>.Pase el número de caracteres restantes, no el tamaño del búfer de <variable>
Esta advertencia indica que una llamada a una función de concatenación de cadena está pasando probablemente un valor incorrecto para el número de caracteres a concatenar.Este defecto puede producir una saturación del búfer explotable o un bloqueo.Una causa común de este defecto es pasar el tamaño de búfer, en lugar del número de caracteres restante en el búfer, a la función de manipulación de cadenas.
Ejemplo
El código siguiente genera esta advertencia:
#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 ...
}
Para corregir esta advertencia, corrija el número de caracteres que se deben concatenar como se muestra en el siguiente ejemplo de código:
#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 ...
}
Para corregir esta advertencia mediante la función de manipulación de cadenas de caracteres segura, vea el código siguiente:
#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;
}
Vea también
Referencia
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