Condividi tramite


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 floatstringa o struct viene passato. Questo avviso controlla gli identificatori di tipo integer come %de 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