当调用 'function' 时,作为参数 'number' 传递的非整数
备注
此警告指示 printf(如函数)中的格式字符串说明符需要整数类型,但要改为传递非整数,例如 float、字符串或 struct。 此警告检查整数类型说明符(如 %d)和宽度/精度说明符(如 %*.*f)。 此缺陷可能导致输出不正确。
代码分析名称:NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
示例
以下代码将生成此警告,因为 sprintf 函数中需要使用整数,而不是 float:
#include <stdio.h>
void f_defective()
{
char buff[50];
float f=1.5;
sprintf(buff, "%d",f);
}
以下代码使用整数强制转换来更正此警告。 或者,它可以通过修改格式说明符以匹配类型来更正警告。
#include <stdio.h>
void f_corrected()
{
char buff[50];
float f=1.5;
sprintf(buff,"%d",(int)f);
}
以下代码使用安全字符串操作函数 sprintf_s 来更正此警告:
#include <stdio.h>
void f_safe()
{
char buff[50];
float f=1.5;
sprintf_s(buff,50,"%d",(int)f);
}
此警告不适用于 Windows 9x 和 Windows NT 版本 4,因为这些平台上不支持 %p。
另请参阅
格式规范语法:printf 和 wprintf 函数
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
C4477