Freigeben über


Warnung C6066

Kein Zeiger, der als Parameter(Zahl) übergeben wird, wenn der Zeiger im Aufruf von "function" erforderlich ist.

Hinweise

Diese Warnung gibt an, dass die Formatzeichenfolge angibt, dass ein Zeiger erforderlich ist, aber ein Nichtzeiger übergeben wird. Ein Zeiger ist z. B. erforderlich, wenn Sie eine oder eine %n Spezifikation für printfoder eine %d für scanf%p . Dieser Fehler verursacht wahrscheinlich einen Absturz oder eine Beschädigung irgendeiner Form.

Codeanalysename: NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION

Beispiel

Der folgende Code generiert diese Warnung:

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

Um diese Warnung zu korrigieren, übergibt der folgende Code die richtigen Parameter an die sprintf und scanf funktionen:

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

Der folgende Code verwendet sichere Zeichenfolgenmanipulationsfunktionen sprintf_s und scanf_s korrigiert diese Warnung:

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

Diese Warnung wird in der Regel gemeldet, da anstelle eines Zeigers eine ganze Zahl für ein %p Format verwendet wurde. Die Verwendung einer ganzen Zahl in dieser Instanz ist auf 64-Bit-Computern nicht portierbar.

Siehe auch

Syntax der Formatspezifikation: printf- und wprintf-Funktionen
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
C4313
C4477