當呼叫 『function』 時需要整數時,傳遞為參數 『number』 的非整數
備註
這個警告表示 like 函式中的 printf 格式字串規範預期有整數類型,但會改為傳遞非整數,例如 float、字串或 struct 。 此警告會檢查整數類型規範,例如 %d,以及使用類似 之 %*.*f整數的寬度/有效位數規範。 此瑕疵可能會導致輸出不正確。
程式碼分析名稱:NON_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION
範例
下列程式代碼會產生此警告,因為需要整數, float 而不是函式中的 sprintf :
#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