Compartilhar via


C6066

Aviso C6066: não ponteiro transmitido sistema autônomo parâmetro <number>quando o ponteiro é necessário chamar <função>

Este aviso indica que a seqüência de caracteres de formato Especifica que um ponteiro é necessário, 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 tem probabilidade de causar uma falhar ou 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 transmite 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 funções de manipulação de seqüência segura – 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 ...
}

Esse aviso geralmente é relatado como um número inteiro tem sido usado para um %p Formatar em vez de um ponteiro. Usar um número inteiro neste exemplo não é portátil para computadores de 64 bit.

Consulte também

Referência

sprintf_s _sprintf_s_l swprintf_s, _swprintf_s_l

scanf_s _scanf_s_l wscanf_s, _wscanf_s_l