C6066
upozornění C6066: bez ukazatel předaný jako parametr <number> Při volání <function> vyžaduje ukazatele
Toto upozornění označuje formát řetězce určuje, že ukazatel je to požadováno, například %n nebo %p specifikace printf nebo %d pro scanf, avšak předána bez ukazatele.Tato závada je pravděpodobně způsobí selhání nebo poškození některé formuláře.
Příklad
Následující kód vygeneruje toto upozornění:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", 1, MAX ); //warning C6066
// code ...
}
void g( int i )
{
int result;
result = scanf( "%d", i ); // warning C6066
// code ...
}
Chcete-li opravit toto upozornění následující kód předává správné parametry sprintf a scanf funkcí:
#include <stdio.h>
#define MAX 30
void f( )
{
char buff[MAX];
sprintf( buff, "%s %p %d", "Hello, World!", buff, MAX ); // pass buff
// code ...
}
void g( int i )
{
int result;
// code ...
result = scanf( "%d", &i ); // pass the address of i
// code ...
}
Následující kód pomocí funkcí bezpečného řetězec manipulace – sprintf_s a scanf_s – opravit toto upozornění:
void f( )
{
char buff[MAX];
sprintf_s( buff, sizeof(buff), "%s %p %d", "Hello, World!", buff, MAX );
// code ...
}
void g( int i )
{
int result;
// code ...
result = scanf_s( "%d", &i );
// code ...
}
Toto upozornění obvykle oznamovány, protože byla použita pro celé %p formátu místo ukazatele.Celé číslo v tomto případě není přenosný na 64bitových počítačích.