Предупреждение 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));
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по