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