포테이토 주식회사_IT 개발블로그
C언어 Visual Studio scanf 에러 해결 방법 본문
https://bymakers.tistory.com/6
비주얼 스튜디오 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
'Programming' 카테고리의 다른 글
파이썬 이미지 프로세싱 하드코딩 (0) | 2021.07.02 |
---|---|
개발자의 포트폴리오・이력서 작성법, 면접을 잘 보는 법 (1) | 2021.05.12 |
알고리즘 문제풀이를 함에 있어서 자주 접하게 될 용어들 (0) | 2021.05.12 |
코드포스 레이팅과 롤 티어의 비교 (0) | 2021.05.12 |
[네이버] 2020 개발자 공채 지원 및 면접 후기 (0) | 2021.05.12 |