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 printf
oder 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