Share via


C6067

경고 C6067: <function>에 대한 호출에서 매개 변수 <number>은(는) 문자열의 주소여야 합니다.

이 경고는 형식 지정자와 함수 매개 변수가 일치하지 않음을 나타냅니다. 경고에서는 문자열의 주소를 사용할 것을 제안하지만 문제를 해결하기 전에 함수에 필요한 매개 변수의 형식을 확인해야 합니다. 예를 들어, printf에 %s가 지정되어 있으면 문자열 인수가 필요하지만 scanf에 %s가 지정되어 있으면 문자열의 주소가 필요합니다.

이 오류로 인해 일부 형식에 충돌이나 손상이 발생할 수 있습니다.

예제

다음 코드에서는 문자열 대신 정수가 전달되기 때문에 이 경고가 생성됩니다.

#include <stdio.h>
void f_defective( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",1); // warning
  // code ...
}

이 경고를 해결하려면 다음 코드에서처럼 문자열을 printf에 인수로 전달합니다.

#include <stdio.h>
void f_corrected( )
{  
  char *str = "Hello, World!";
  printf("String:\n %s",str); 
  // code ...
}

다음 코드에서는 매개 변수 buffer를 scanf에 전달할 때 잘못된 간접 참조 수준이 지정되었기 때문에 이 경고가 생성됩니다.

#include <stdio.h>
void h_defective( )
{
  int retval;
  char* buffer = new char(20);
  if (  buffer )
  {
    retval = scanf("%s", &buffer); // warning C6067
    // code...
    delete buffer ;
  }
}

위의 경고를 해결하려면 다음 코드에서처럼 올바른 매개 변수를 전달합니다.

#include <stdio.h>
void h_corrected( )
{
  int retval;
  char* buffer = new char(20);
  if ( buffer )
  {
    retval = scanf("%s", buffer);
    // code...
    delete buffer;
  }
}

다음 코드에서는 안전한 문자열 조작 함수를 사용하여 이 경고를 해결합니다.

#include <stdio.h>
void f_safe( )
{
  char buff[20];
  int retVal;
  
  sprintf_s( buff, 20, "%s %s", "Hello", "World!" );
  printf_s( "String:\n   %s  %s", "Hello", "World!" );
  retVal = scanf_s("%s", buff, 20);
}

참고 항목

참조

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

printf, _printf_l, wprintf, _wprintf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l