Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

포테이토 주식회사_IT 개발블로그

C언어 Visual Studio scanf 에러 해결 방법 본문

Programming

C언어 Visual Studio scanf 에러 해결 방법

adelait 2021. 5. 16. 19:00

https://bymakers.tistory.com/6

 

C언어 Visual Studio scanf 에러 해결 방법

비주얼 스튜디오 2013(VS 2013) 버전 이상부터 scanf 을 사용하면 아래와 같은 에러가 나면서 컴파일이 안됩니다 에러 메시지를 보면 error C4996: 'scanf': This function or variable may be unsafe. Consider u..

bymakers.tistory.com

 

 

비주얼 스튜디오 2013(VS 2013) 버전 이상부터 scanf 을 사용하면 아래와 같은 에러가 나면서 컴파일이 안됩니다

 



에러 메시지를 보면 error 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를 사용하거나 _CRT_SECURE_NO_WARNINGS 를 사용하라고 합니다

 

scanf를 사용할 수 있도록 _CRT_SECURE_NO_WARNINGS를 사용해 봅시다

 

솔루션 탐색기에서 자신의 프로젝트 명을 마우스 오른쪽 클릭 -> 속성에 들어갑니다

 

 

 

 

 

 

 

원래 있던 글 뒤에 ;(구분자) 뒤에 _CRT_SECURE_NO_WARNINGS를 넣어주고 ; 까지 넣어줍니다

 

 

 

 

그리고 다시 빌드(컴파일) 시켜보면 에러가 없어집니다

 

너무...어렵다.....

다른 방법은.... 같은 속성창에서  SDL 검사를 아니요~ 로 변경하면 끝!!!! 

 

 

 

 

 

 

 

 

또 전처리기에 등록하는 방법말고 아래와 같이 소스코드에 ifdef를 이용하여 define으로 _CRT_SECURE_NO_WARNINGS을 선언해 주면 됩니다

 

 

 

 

_CRT_SECURE_NO_WARNINGS 대신 #pragma warning(disable: 4996) 을 사용하여도 됩니다

(4996은 아까 에러의 메시지에 써있음)

pragma는 한 번만 실행하게 되기 위해 사용합니다 ifdef와 비슷한 기능을 합니다

 

 

 

 

또 이런식으로 추가해주는 방법 말고 가장 간단한 방법은

 

솔루션 프로젝트를 만들때 SDL(Security Development Lifecycle) 검사 부분을 체크해제하는 것입니다

 

 

 

 

하지만, 가장 좋은 방법은 취약한 함수인 scanf 대신에scanf_s를 사용해보는 것입니다

 

scanf는 버퍼오버플로우 취약점이 존재하기 때문에 이렇게 반 강제적으로 scanf의 사용을 막은거 같습니다

 

 

int num=0;

scanf_s("%d", &num, sizeof(4));

이런식으로 사이즈 지정해주는 scanf_s