警告 C6066

在需要使用指针调用“function”时,已将非指针作为“参数(编号)”传递。

注解

此警告指示格式字符串指定需要使用指针,但正在传递非指针。 例如,对 printf 使用 %n%p 规范,或者对 scanf 使用 %d 时,需要有指针。 此缺陷可能会导致某种形式的故障或损坏。

代码分析名称:NON_POINTER_ARGUMENT_TO_FORMAT_FUNCTION

示例

以下代码将生成此警告:

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

若要更正此警告,以下代码会将正确的参数传递给 sprintfscanf 函数:

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

以下代码使用安全字符串操作函数(sprintf_sscanf_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 = scanf_s( "%d", &i );
   // code ...
}

通常,如果用于 %p 格式的是整数而非指针,则会报告此警告。 在此实例中使用整数不能移植到 64 位计算机。

另请参阅

格式规范语法:printf 和 wprintf 函数


C4313
C4477