경고 C6067
'function' 호출의 매개 변수 'number'는 문자열의 주소여야 합니다.
설명
이 경고는 형식 지정자와 함수 매개 변수 간의 불일치를 나타냅니다. 경고가 문자열의 주소를 사용하는 것을 제안하더라도 문제를 해결하기 전에 함수가 예상하는 매개 변수 형식을 검사 합니다. 예를 들어 사양에 %s
printf
문자열 인수가 필요하지만 사양에 %s
scanf
문자열의 주소가 필요합니다.
이 결함은 어떤 형태의 충돌 또는 손상을 일으킬 가능성이 높습니다.
코드 분석 이름: NON_STRING_ARGUMENT_TO_FORMAT_FUNCTION
예시
다음 코드는 문자열 대신 정수가 전달되므로 이 경고를 생성합니다.
#include <stdio.h>
void f_defective()
{
char *str = "Hello, World!";
printf("String:\n %s", 1);
// code ...
}
경고를 수정하려면 다음 코드와 같이 문자열을 printf
매개 변수로 전달합니다.
#include <stdio.h>
void f_corrected()
{
char *str = "Hello, World!";
printf("String:\n %s", str);
// code ...
}
매개 변수 버퍼 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);
}
참고 항목
형식 사양 구문: printf 및 wprintf 함수
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
C4313
C4477
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기