경고 C6066
'function'을 호출할 때 포인터가 필요한 경우 매개 변수(숫자)로 전달되는 비 포인터입니다.
설명
이 경고는 형식 문자열이 포인터가 필요하지만 비 포인터가 전달되고 있음을 나타냅니다. 포인터가 필요합니다(예: 에 대한 또는 사양을 사용하거나 %p
에 대한 printf
scanf
포인터를 %d
사용하는 %n
경우). 이 결함은 어떤 형태의 충돌 또는 손상을 일으킬 가능성이 높습니다.
코드 분석 이름: 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 ...
}
이 경고를 수정하기 위해 다음 코드는 올바른 매개 변수를 함수에 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 = 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 = scanf_s( "%d", &i );
// code ...
}
이 경고는 일반적으로 정수가 포인터 대신 형식에 %p
사용되었기 때문에 보고됩니다. 이 인스턴스에서 정수 사용은 64비트 컴퓨터로 이식할 수 없습니다.
참고 항목
형식 사양 구문: printf 및 wprintf 함수
sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
C4313
C4477
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기