Avviso C6273
Numero intero passato come parametro 'number' quando è necessario un numero intero nella chiamata a 'function'
Osservazioni:
Questo avviso indica che l'identificatore di stringa di formato in una printf
funzione like prevede un tipo integer, ma un valore non intero, ad esempio una float
stringa o struct
viene passato. Questo avviso controlla gli identificatori di tipo integer come %d
e l'identificatore di larghezza/precisione che usano numeri interi come %*.*f
. È probabile che questo difetto generi un output errato.
Nome dell'analisi del codice: NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
Esempio
Il codice seguente genera questo avviso perché è necessario un numero intero anziché una float
nella sprintf
funzione :
#include <stdio.h>
void f_defective()
{
char buff[50];
float f=1.5;
sprintf(buff, "%d",f);
}
Il codice seguente usa un cast intero per correggere questo avviso. In alternativa, potrebbe aver corretto l'avviso modificando l'identificatore di formato in modo che corrisponda al tipo.
#include <stdio.h>
void f_corrected()
{
char buff[50];
float f=1.5;
sprintf(buff,"%d",(int)f);
}
Il codice seguente usa la funzione di manipolazione delle stringhe sicura, sprintf_s
, per correggere questo avviso:
#include <stdio.h>
void f_safe()
{
char buff[50];
float f=1.5;
sprintf_s(buff,50,"%d",(int)f);
}
Questo avviso non è applicabile in Windows 9x e Windows NT versione 4 perché %p non è supportato in queste piattaforme.
Vedi anche
Sintassi della specifica del formato: funzioni printf e wprintf
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
C4477