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