본문 바로가기
한국으로/TIPS

Visual Studio에서 scanf 오류를 해결하는 방법

by 영킴. 2018. 7. 7.

Visual Studio에서 scanf 오류를 해결하는 방법

프로그램을 실행 시 입력값을 scanf 함수로 받을 때, 비주얼 스튜디오는 scanf_s 함수 사용을 권장하며 오류 메세지를 띄울 수 있습니다.

scanf 함수는 버퍼 오버플로우라는 취약점이 존재하기 때문에 컴파일러가 반강제적으로 이 함수의 호출을 막는 것입니다.


참고로 버퍼 오버플로우(Buffer Overflow)는 입력값의 크기가 버퍼 사이즈보다 커서 입력값을 버퍼에 다 담지 못할 때 문제가 되는 취약점을 뜻합니다. 

버퍼 오버플로우가 발생할 경우, 메모리 상에서 버퍼를 초과하는 부분이 덮어씌여지기 때문에 버퍼 이후의 메모리값이 바뀌게 됩니다.



어쨋든 메모리 관리를 잘 할 자신이 있다면 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.



앞서 설명했듯이, scanf 함수가 취약하니 scanf_s 함수를 쓰는 것을 권장한다는 뜻입니다. 무시하시고, 문제를 해결하기 위한 방법을 알아봅니다.



1 프로젝트를 우클릭하고 [속성]을 선택합니다.



2. 속성 페이지의 왼쪽에서 [구성 속성] - [C/C++] - [전처리기]를 선택합니다.



3. [전처리기 정의]에 이미 입력된 부분은 지우지 마시고, 그 뒷부분에 ; _CRT_SECURE_NO_WARNINGS; 를 써줍니다. 세미콜론을 꼭 적어주세요.




4. 이제 scanf 함수를 사용할 수 있습니다.