Condividi tramite


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

printf, _printf_l, wprintf, _wprintf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l