Avertissement C6273
Entier non transmis en tant que paramètre 'number' lorsqu’un entier est requis dans l’appel à 'function'
Notes
Cet avertissement indique que le spécificateur de chaîne de format dans une printf
fonction semblable attend un type entier, mais qu’un entier non entier tel qu’une float
chaîne ou struct
est passé à la place. Cet avertissement case activée s spécificateurs de type entier comme %d
, et le spécificateur largeur/précision qui utilisent des entiers comme %*.*f
. Ce défaut est susceptible d’entraîner une sortie incorrecte.
Nom de l’analyse du code : NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
Exemple
Le code suivant génère cet avertissement, car un entier est requis au lieu d’un float
dans la sprintf
fonction :
#include <stdio.h>
void f_defective()
{
char buff[50];
float f=1.5;
sprintf(buff, "%d",f);
}
Le code suivant utilise un cast entier pour corriger cet avertissement. Vous pouvez également corriger l’avertissement en modifiant le spécificateur de format pour qu’il corresponde au type.
#include <stdio.h>
void f_corrected()
{
char buff[50];
float f=1.5;
sprintf(buff,"%d",(int)f);
}
Le code suivant utilise la fonction de manipulation de chaîne sécurisée, sprintf_s
pour corriger cet avertissement :
#include <stdio.h>
void f_safe()
{
char buff[50];
float f=1.5;
sprintf_s(buff,50,"%d",(int)f);
}
Cet avertissement n’est pas applicable sur Windows 9x et Windows NT version 4, car %p n’est pas pris en charge sur ces plateformes.
Voir aussi
Syntaxe de spécification de format : fonctions printf et wprintf
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
C4477