Предупреждение C6064

Отсутствующий целочисленный аргумент в "имя функции", соответствующий описательу преобразования "number"

Это предупреждение указывает, что код не предоставляет достаточно аргументов для сопоставления строки формата, а один из отсутствующих аргументов — целое число.

Замечания

Этот дефект, скорее всего, приведет к неправильному выходу, и в более опасных случаях может привести к переполнению стека.

Имя анализа кода: MISSING_INTEGER_ARGUMENT_TO_FORMAT_FUNCTION

Пример

Следующий код создает это предупреждение, так как он использует неверное число аргументов в вызове sprintf_s , а отсутствующий аргумент является целым числом. Если небезопасная функция sprintf была использована вместо более безопасного варианта sprintf_s, этот код, скорее всего, приведет к переполнению стека вместо просто непредвиденных выходных данных:

void f()
{
    char buff[8];
    const char *string="Hello";
    sprintf_s(buff, sizeof(buff), "%s %d", string);  // Attempts to print "Hello "
    // followed by a number up to eleven characters long, depending on the garbage
    // found on the stack. Any number other than a single non-negative digit can't
    // fit in the 8 char buffer and leave room for the trailing null. If sprintf 
    // had been used instead, it would overflow.
}

Чтобы исправить это предупреждение, укажите отсутствующие аргументы или измените строку формата. В этом примере мы добавим отсутствующее целое число.

void f()
{
    char buff[8];
    const char *string = "Hello";
    sprintf_s(buff, sizeof(buff), "%s %d", string, strlen(string));
}

См. также

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
C4473