Advertencia C6273

No entero pasado como parámetro 'number' cuando se requiere un entero en la llamada a 'function'

Comentarios

Esta advertencia indica que el especificador de cadena de formato en una printf función similar espera un tipo entero, pero que no es un entero, como una floatcadena , o struct se pasa en su lugar. Esta advertencia comprueba los especificadores de tipo entero como %d, y el especificador de ancho y precisión que usan enteros como %*.*f. Es probable que este defecto produzca una salida incorrecta.

Nombre del análisis de código: NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Ejemplo

El código siguiente genera esta advertencia porque se requiere un entero en lugar de un valor float en la función sprintf:

#include <stdio.h>

void f_defective()
{
  char buff[50];
  float f=1.5;

  sprintf(buff, "%d",f);
}

El código siguiente usa una conversión de enteros para corregir esta advertencia. Como alternativa, podría haber corregido la advertencia modificando el especificador de formato para que coincida con el tipo.

#include <stdio.h>

void f_corrected()
{
  char buff[50];
  float f=1.5;

  sprintf(buff,"%d",(int)f);
}

El siguiente código usa la función de manipulación segura de cadenas, sprintf_s, para corregir esta advertencia:

#include <stdio.h>

void f_safe()
{
  char buff[50];
  float f=1.5;

  sprintf_s(buff,50,"%d",(int)f);
}

Esta advertencia no es aplicable en Windows 9x y Windows NT versión 4 porque %p no se admite en estas plataformas.

Consulte también

Sintaxis de especificación de formato: funciones printf y wprintf
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
C4477