C6066
更新:2007 年 11 月
警告 C6066: 傳遞非指標做為參數 <number>,但 <function> 呼叫需要指標
這個警告表示格式字串 (Format String) 指定需要指標 (例如,printf 的 %n 或 %p 規格,或 scanf 的 %d),但傳遞的是非指標。這項缺失極可能造成某些形式的損毀。
範例
下列程式碼將產生出這個警告:
#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 ...
}
若要更正這個警告,下列程式碼會將正確參數傳遞給 sprintf 及 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 ...
}
下列程式碼使用安全字串管理函式 (sprintf_s 及 scanf_s) 來更正這個警告:
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 ...
}
因為 %p 格式是使用整數,而非指標,所以一般會報告這個警告。在這個執行個體中使用整數並不會移植至 64 位元電腦。