Compartir a través de


Advertencia C6066

El puntero no se pasa como parámetro (número) cuando se requiere el puntero en la llamada a "function".

Comentarios

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

Nombre del análisis de código: NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION

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 = 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 = scanf( "%d", &i ); // pass the address of i
   // code ...
}

El código siguiente usa funciones sprintf_s de manipulación de cadenas seguras 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 = scanf_s( "%d", &i );
   // code ...
}

Normalmente, esta advertencia se notifica porque se ha usado un entero para un formato %p en lugar de un puntero. El uso de un entero en esta instancia no es portátil a equipos de 64 bits.

Consulte también

Sintaxis de especificación de formato: funciones printf y wprintf
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
C4313
C4477