Partager via


C6066

Avertissement C6066 : élément non pointeur passé en tant que paramètre <numéro> lorsque le pointeur est requis dans l'appel à <fonction>

Cet avertissement indique que la chaîne de format spécifie qu'un pointeur est requis, par exemple, une spécification %n ou %p pour printf ou un %d pour scanf, mais une valeur autre qu'un pointeur est passée.Ce défaut risque de provoquer un blocage ou une altération, sous une forme quelconque.

Exemple

Le code suivant génère cet avertissement :

#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;
   result = scanf( "%d", i ); // warning C6066
   // code ...
}

Pour corriger cet avertissement, le code suivant passe des paramètres corrects aux fonctions sprintf et 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;
   // code ...
   result = scanf( "%d", &i ); // pass the address of i
   // code ...
}

Le code suivant utilise les fonctions de manipulation de chaîne sécurisées, sprintf_s et scanf_s, pour corriger cet avertissement :

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

Cet avertissement est généralement signalé car un entier a été utilisé pour un format %p au lieu d'un pointeur.L'utilisation d'un entier dans cette instance n'est pas portable aux ordinateurs 64 bits.

Voir aussi

Référence

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l