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