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 floatchaî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_spour 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