Share via


C6066

警告 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 位元電腦。

請參閱

參考

sprintf_s、 _sprintf_s_l、 swprintf_s、 _swprintf_s_l

scanf_s、 _scanf_s_l、 wscanf_s、 _wscanf_s_l