C6059
Aggiornamento: novembre 2007
C6059
avviso C6059: Parametro di lunghezza errata nella chiamata a <funzione>. Passare il numero di caratteri rimanenti, non la dimensione del buffer di <variabile>
L'avviso indica che è probabile che una chiamata a una funzione di concatenazione di stringhe stia passando un valore non corretto per il numero di caratteri da concatenare. Questo problema potrebbe provocare un arresto anomalo o un sovraccarico del buffer. Una causa diffusa di errore è il passaggio della dimensione del buffer invece del numero di caratteri rimasti nel buffer alla funzione di modifica delle stringhe.
Esempio
Il codice seguente genera questo avviso:
#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 ...
}
Per risolvere il problema, utilizzare il numero corretto di caratteri da concatenare, come illustrato nel codice riportato di seguito.
#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 ...
}
Per risolvere il problema utilizzando la funzione di modifica delle stringhe protetta, vedere il codice riportato di seguito.
#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;
}
Vedere anche
Riferimenti
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