C6066
Ostrzeżenie C6066: nie wskaźnik przekazany jako parametr <number> Kiedy wskaźnik myszy jest wymagane w wywołaniu <function>
To ostrzeżenie wskazuje, że ciąg formatu określa, że wskaźnik jest wymagane, na przykład, %n lub %p Specyfikacja printf lub %d do scanf, ale przekazywano bez wskaźnika.Wada ten jest może spowodować awarię lub uszkodzenie jakiejś formy.
Przykład
Poniższy kod generuje ostrzeżenie to:
#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 ...
}
Aby poprawić to ostrzeżenie, poniższy kod powoduje przekazanie prawidłowe parametry sprintf i scanf funkcje:
#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 ...
}
Poniższy kod Użyj bezpiecznego manipulujące łańcuchami — sprintf_s i scanf_s — Aby poprawić to ostrzeżenie:
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 ...
}
To ostrzeżenie jest zwykle zgłaszane, ponieważ integer został użyty do %p format zamiast wskaźnika.Za pomocą liczby całkowitej w takim przypadku nie jest przenośny na komputerach 64-bitowych.