Предупреждение 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