Partager via


C6066

Mise à jour : novembre 2007

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