Предупреждение C6067
Параметр "number" в вызове "function" должен быть адресом строки.
Замечания
Это предупреждение указывает на несоответствие между описательом формата и параметром функции. Несмотря на то, что предупреждение предлагает использовать адрес строки, необходимо проверка тип параметра, который ожидается перед исправлением проблемы. Например, %s
для спецификации printf
требуется строковый аргумент, но %s
для спецификации scanf
требуется адрес строки.
Этот дефект, скорее всего, приведет к сбою или повреждению какой-либо формы.
Имя анализа кода: NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION
Пример
Следующий код создает это предупреждение, так как целое число передается вместо строки:
#include <stdio.h>
void f_defective()
{
char *str = "Hello, World!";
printf("String:\n %s", 1);
// code ...
}
Чтобы исправить предупреждение, передайте строку в качестве параметра printf
, как показано в следующем коде:
#include <stdio.h>
void f_corrected()
{
char *str = "Hello, World!";
printf("String:\n %s", str);
// code ...
}
Следующий код создает это предупреждение, так как при передаче параметра, буфера в scanf
:
#include <stdio.h>
void h_defective()
{
int retval;
char* buffer = new char(20);
if (buffer)
{
retval = scanf("%s", &buffer); // warning C6067
// code...
delete buffer;
}
}
Чтобы исправить указанные выше предупреждения, передайте правильный параметр, как показано в следующем коде:
#include <stdio.h>
void h_corrected()
{
int retval;
char* buffer = new char(20);
if (buffer)
{
retval = scanf("%s", buffer);
// code...
delete buffer;
}
}
Следующий код использует функции безопасной обработки строк для исправления этого предупреждения:
#include <stdio.h>
void f_safe()
{
char buff[20];
int retVal;
sprintf_s(buff, 20, "%s %s", "Hello", "World!");
printf_s("String:\n %s %s", "Hello", "World!");
retVal = scanf_s("%s", buff, 20);
}
См. также
Синтаксис спецификации форматирования: функции printf и wprintf
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
printf, _printf_l, wprintf, _wprintf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
C4313
C4477
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе:Отправить и просмотреть отзыв по