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.