Предупреждение C6273
Не целое число, передаваемое в качестве параметра number, если целое число требуется при вызове функции.
Замечания
Это предупреждение указывает, что описатель строки формата в подобной 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по