Condividi tramite


Avviso C6066

Non puntatore passato come parametro(numero) quando il puntatore è necessario nella chiamata a 'function'.

Osservazioni:

Questo avviso indica che la stringa di formato specifica che è necessario un puntatore, ma viene passato un puntatore non. È necessario un puntatore, ad esempio quando si usa una %n specifica o %p per printfo per %dscanf. Questo difetto potrebbe causare un arresto anomalo o un danneggiamento di qualche forma.

Nome dell'analisi del codice: NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION

Esempio

Il codice seguente genera questo avviso:

#include <stdio.h>
#define MAX 30
void f( )
{
  char buff[MAX];
  sprintf( buff, "%s %p %d", "Hello, World!", 1, MAX ); //warning C6066
  // code ...
}

void g( int i )
{
   int result = scanf( "%d", i ); // warning C6066
   // code ...
}

Per correggere questo avviso, il codice seguente passa i parametri corretti alle sprintf funzioni e scanf :

#include <stdio.h>
#define MAX 30

void f( )
{
   char buff[MAX];
   sprintf( buff, "%s %p %d", "Hello, World!", buff, MAX ); // pass buff
   // code ...
}
void g( int i )
{
   int result = scanf( "%d", &i ); // pass the address of i
   // code ...
}

Il codice seguente usa funzioni sprintf_s di manipolazione delle stringhe sicure e scanf_s per correggere questo avviso:

void f( )
{
   char buff[MAX];
   sprintf_s( buff, sizeof(buff), "%s %p %d", "Hello, World!", buff, MAX );
   // code ...
}
void g( int i )
{
   int result = scanf_s( "%d", &i );
   // code ...
}

Questo avviso viene in genere segnalato perché è stato usato un numero intero per un %p formato anziché un puntatore. L'uso di un numero intero in questa istanza non è portabile a computer a 64 bit.

Vedi anche

Sintassi della specifica del formato: funzioni printf e wprintf
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
C4313
C4477