다음을 통해 공유


C6066

경고 C6066: 포인터가 아닌 항목이 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 포인터가 필요합니다.

이 경고는 예를 들어 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