Compartir a través de


C6066

Actualización: noviembre 2007

C6066

Advertencia C6066: No se pasó el puntero como parámetro <número> cuando el puntero es necesario para llamar a <función>

Esta advertencia indica que la cadena de formato especifica que se requiere un puntero, por ejemplo, una especificación %n o %p para printf o %d para scanf, pero se pasa algo que no es un puntero. Es probable que este defecto provoque algún tipo de bloqueo o de daño.

Ejemplo

El código siguiente genera esta advertencia:

#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 corregir esta advertencia, el código siguiente pasa los parámetros correctos a las funciones sprintf y scanf:

#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 ...
}

El código siguiente utiliza funciones de manipulación de cadenas de caracteres seguras (sprintf_s y scanf_s) para corregir esta advertencia:

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 ...
}

Esta advertencia se suele mostrar porque se utiliza un entero para un formato %p en lugar de un puntero. Utilizar un entero en esta instancia no es portable a los equipos de 64 bits.

Vea también

Referencia

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l