Freigeben über


C6066

Aktualisiert: November 2007

C6066

Warnung C6066: Ein Nichtzeiger wurde als <Nummer>-Parameter übergeben. Im Aufruf von <Funktion> ist jedoch ein Zeiger erforderlich.

Diese Warnung gibt an, dass gemäß der Formatzeichenfolge ein Zeiger erforderlich ist, z. B. eine %n-Spezifikation oder eine %p-Spezifikation für printf oder %d für scanf, jedoch ein Nichtzeiger übergeben wird. Dieser Fehler kann zu einem Absturz oder einer Beschädigung führen.

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;
   result = scanf( "%d", i ); // warning C6066
   // code ...
}

Um diese Warnung zu korrigieren, werden im folgenden Code die richtigen Parameter an die sprintf-Funktion und die scanf-Funktion übergeben:

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

Im folgenden Code werden Funktionen zur sicheren Zeichenfolgenbearbeitung – sprintf_s und scanf_s – verwendet, um diese Warnung zu korrigieren:

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

Diese Warnung wird i. d. R. gemeldet, wenn anstelle eines Zeigers eine ganze Zahl für ein %p-Format verwendet wurde. Wenn in diesem Fall eine ganze Zahl verwendet wird, ist der Code nicht auf 64-Bit-Computer übertragbar.

Siehe auch

Referenz

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l