C6067
upozornění C6067: parametr <number> musí být ve volání funkce <function> adresou řetězce
Toto upozornění znamená nesoulad mezi specifikátorem formátu a parametrem funkce.Přestože upozornění navrhuje použít adresu řetězce, je před opravou problému nutné zkontrolovat typ parametru, který funkce očekává.Například specifikace %s pro printf vyžaduje argument řetězce, ale specifikace %s v scanf vyžaduje adresu řetězce.
Tato závada pravděpodobně způsobí selhání nebo poškození některého formuláře.
Příklad
Následující kód vygeneruje toto varování, protože namísto řetězce je předáno celé číslo:
#include <stdio.h>
void f_defective( )
{
char *str = "Hello, World!";
printf("String:\n %s",1); // warning
// code ...
}
Pro nápravu tohoto upozornění předejte řetězec jako parametr printf, jak je znázorněno v následujícím kódu:
#include <stdio.h>
void f_corrected( )
{
char *str = "Hello, World!";
printf("String:\n %s",str);
// code ...
}
Následující kód vygeneruje toto upozornění, protože je při předávání parametru, vyrovnávací paměti, do scanf určena nesprávná úroveň dereference:
#include <stdio.h>
void h_defective( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", &buffer); // warning C6067
// code...
delete buffer ;
}
}
Pro nápravu výše uvedených upozornění předejte správný parametr, jak je znázorněno v následujícím kódu:
#include <stdio.h>
void h_corrected( )
{
int retval;
char* buffer = new char(20);
if ( buffer )
{
retval = scanf("%s", buffer);
// code...
delete buffer;
}
}
Následující kód používá pro opravu tohoto upozornění bezpečnou funkci pro práci s řetězci:
#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);
}
Viz také
Referenční dokumentace
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l