C6067
avviso C6067: il parametro <numero> nella chiamata a <funzione> deve essere l'indirizzo della stringa
L'avviso indica una mancata corrispondenza tra l'identificatore di formato e il parametro di funzione. Anche se l'avviso suggerisce di utilizzare l'indirizzo della stringa, è necessario verificare il tipo di parametro previsto da una funzione prima di risolvere il problema. Una specifica %s per printf, ad esempio, richiede un argomento di stringa mentre una specifica %s in scanf richiede un indirizzo della stringa.
Questo errore può causare una qualche forma di arresto anomalo o danneggiamento.
Esempio
Il codice riportato di seguito genera l'avviso perché viene passato un Integer in luogo di una stringa.
#include <stdio.h>
void f_defective( )
{
char *str = "Hello, World!";
printf("String:\n %s",1); // warning
// code ...
}
Per risolvere il problema, passare una stringa come parametro a printf, come visualizzato nel codice seguente:
#include <stdio.h>
void f_corrected( )
{
char *str = "Hello, World!";
printf("String:\n %s",str);
// code ...
}
Nel codice seguente l'avviso viene generato perché viene specificato un livello non corretto di riferimento indiretto al passaggio del parametro, buffer, a scanf:
#include <stdio.h>
void h_defective( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", &buffer); // warning C6067
// code...
delete buffer ;
}
}
Per risolvere i problemi, passare il parametro corretto come indicato nel codice seguente:
#include <stdio.h>
void h_corrected( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", buffer);
// code...
delete buffer;
}
}
Per risolvere il problema, nel codice seguente vengono utilizzate le funzioni di modifica delle stringhe protette:
#include <stdio.h>
void f_safe( )
{
char buff[20];
int retVal;
sprintf_s( buff, 20, "%s %s", "Hello", "World!" );
printf_s( "String:\n %s %s", "Hello", "World!" );
retVal = scanf_s("%s", buff, 20);
}
Vedere anche
Riferimenti
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l