Поделиться через


C6067

Обновлен: Ноябрь 2007

C6067

Предупреждение C6067: параметр <номер> в вызове <функция> должен быть адресом строки.

Это предупреждение указывает на несоответствие между определителем формата и параметром функции. Несмотря на то, что в предупреждении рекомендуется использовать адрес строки, перед устранением неполадки нужно проверить тип параметра, ожидаемого функцией. Например, определению %s для printf требуется строковый аргумент, но определению %s в scanf требуется адрес строки.

Эта неполадка может вызвать сбой или повреждение какого-либо рода.

Пример

Это предупреждение возникает в следующем примере кода, поскольку вместо строки передается целое число:

#include <stdio.h>
void f_defective( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",1); // warning
  // code ...
}

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

#include <stdio.h>
void f_corrected( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",str); 
  // code ...
}

Это предупреждение возникает в следующем фрагменте кода из-за неверного уровня при передаче параметра buffer в 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);
}

См. также

Ссылки

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