C/C

scanf() C4996 오류 이유, 해결

HicKee 2022. 9. 26. 12:29

scanf 보안 경고

C4996 'scanf': This function or variable may be unsafe. 
Consider using scanf_s instead. 
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
>> 
C4996 'scanf': 이 함수 또는 변수는 안전하지 않을 수 있습니다.
대신 scanf_s를 사용하는 것이 좋습니다.
지원 중단을 비활성화하려면 _CRT_SECURE_NO_WARNINGS를 사용하세요. 
자세한 내용은 온라인 도움말을 참조하십시오.

 

scanf()가 visual studio에서 보안문제로 depricated 상태이기 때문이다.

 

depricated

더보기

네이버 사전 - 중요도가 떨어져 더 이상 사용되지 않고 앞으로는 사라지게 될 상태
어떤 기능이 아직까지 사용되고는 있지만, 신기능이 나왔기 때문에 조만간 사라지게 될 상태

BOF Buffer OverFlow 취약한 함수 
길이 검사 또는 경계 검사가 정상적으로 수행되지 않았을 때 발생 
이 경우 프로그래머가 지정한 메모리 영역뿐만이 아닌 인접한 영역의 내용까지도 침범

C/C++ 기록되는 데이터가 지정된 주소의 범위 안에 있는지 검사하지 않기 때문

 

해결방법

1. scanf_s 
scanf( ) 대신 scanf_s( )을 사용하면 해결됨
하지만 해당 오류는 Visual Studio 에서만 발생하는 오류
scanf_s( )는 Visual Studio에서만 사용되는 비표준 함수 이므로 
다른 편집기에서는 컴파일 오류가 발생한다. 

2. #define _CRT_SECURE_NO_WARNINGS
코드의 맨 앞줄에 #inclue <> 위에 정의 하면 사라진다.

3. #pragma warning(disable:4996)
위와 동일 하다.

4. SDL(Security Development Lifecycle) 검사 끄기
소스파일 우 클릭 -> 구성 속성 -> C/C++ -> SDL검사(아니요)

'C > C' 카테고리의 다른 글

static  (0) 2022.09.29
C char 그리고 wchar_t 문자, 문자열  (0) 2022.09.28
묵시적 형 변환, 명시적 형 변환  (0) 2022.09.25
연산자 01  (0) 2022.09.22
변수 진수 값 저장  (0) 2022.09.22