C6066
Aviso C6066: não ponteiro é passado como o parâmetro <number> Quando o ponteiro é necessária na chamada para <function>
Este aviso indica que a seqüência de caracteres de formato Especifica o que é necessário um ponteiro, por exemplo, um %n ou %p especificação de printf ou um %d para scanf, mas um ponteiro-não está sendo passado. Esse defeito é a probabilidade de causar uma pane ou a corrupção de alguma forma.
Exemplo
O código a seguir gera este aviso:
#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 ...
}
Para corrigir esse aviso, o código a seguir passa os parâmetros corretos para o sprintf e scanf funções:
#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 ...
}
O código a seguir usar as funções de manipulação de seqüência de caracteres de segurança — sprintf_s e scanf_s — para corrigir este aviso:
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 ...
}
Este aviso normalmente é relatado como um inteiro foi usado para um %p formato em vez de um ponteiro. Não é portátil para computadores de 64 bits usando um número inteiro nesta instância.