Avertissement C6066
Non-pointeur passé en tant que paramètre(number) lorsque le pointeur est requis dans l’appel à 'function'.
Notes
Cet avertissement indique que la chaîne de format spécifie qu’un pointeur est requis, mais qu’un non-pointeur est passé. Un pointeur est requis, par exemple, lorsque vous utilisez une ou spécification pour printf
, ou pour scanf
.%d
%p
%n
Ce défaut est susceptible d’entraîner un blocage ou une corruption d’une forme quelconque.
Nom de l’analyse du code : NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION
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 = scanf( "%d", i ); // warning C6066
// code ...
}
Pour corriger cet avertissement, le code suivant transmet les paramètres appropriés aux fonctions et scanf
aux sprintf
fonctions :
#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 ...
}
Le code suivant utilise des fonctions sprintf_s
de manipulation de chaîne sécurisées et scanf_s
corrige 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 = scanf_s( "%d", &i );
// code ...
}
Cet avertissement est généralement signalé, car un entier a été utilisé pour un %p
format au lieu d’un pointeur. L’utilisation d’un entier dans cette instance n’est pas portable pour les ordinateurs 64 bits.
Voir aussi
Syntaxe de spécification de format : fonctions printf et wprintf
sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
C4313
C4477
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour