Warning C6273

Non-integer passed as parameter 'number' when an integer is required in call to 'function'

Remarks

This warning indicates that the format string specifier in a printf like function is expecting an integer type, but a non-integer such as a float, string, or struct is being passed instead. This warning checks integer type specifiers like %d, and width/precision specifier that use integers like %*.*f. This defect is likely to result in incorrect output.

Code analysis name: NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Example

The following code generates this warning because an integer is required instead of a float in the sprintf function:

#include <stdio.h>

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

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

The following code uses an integer cast to correct this warning. Alternatively it could have corrected the warning by modifying the format specifier to match the type.

#include <stdio.h>

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

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

The following code uses safe string manipulation function, sprintf_s, to correct this warning:

#include <stdio.h>

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

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

This warning isn't applicable on Windows 9x and Windows NT version 4 because %p isn't supported on these platforms.

See also

Format specification syntax: printf and wprintf functions
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
C4477