목록

2019년 6월 7일 금요일

C4996 _CRT_SECURE_NO_WARNINGS 문제 해결



책에 있는 내용대로 코드를 짰더니 다음과 같은 에러가 발생합니다.

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, strcpy 등)은 버퍼오버플로우 공격에 취약하기 때문에
보안이 추가된 함수들(scanf_s, strcpy_s 등)을 사용하도록 권장하고 있습니다.

하지만 이 보안이 추가된 함수들이 비표준입니다.
때문에, 보안이 추가된 함수를 사용하는 경우 컴파일러에 따라 에러가 날 수 있죠.

이식성 때문에, 혹은 책의 예제를 그대로 따라하기 위해, 혹은 보안이 추가된 함수는 기존 함수와 사용법이 달라서(조금 다릅니다.) 등의 이유로 기존 함수를 사용하고 싶은 경우가 있습니다.

그에 따른 해결 방법들입니다.

아래 해결 방법 중 한가지를 선택해서 사용하시면 됩니다.


해결 방법 1.


해당 에러가 나는 모든 c, cpp 파일의 최상단에 다음과 같은 줄을 넣어주세요.

#define _CRT_SECURE_NO_WARNINGS

또는

#pragma warning(disable:4996)

이 줄을 넣으셔도 됩니다.




해결 방법 2.



솔루션 탐색기에서 프로그램을 우클릭 후 속성을 눌러 속성 창을 열어줍니다.






속성페이지 위쪽에서
구성을  "모든 구성"
플랫폼을 "모든 플랫폼" 으로 맞춘 뒤
좌측 트리에서
구성속성 -> C/C++ -> 전처리기를 선택해 줍니다.
오른쪽에 나오는 속성 값들 중 "전처리기 정의"
가장 앞쪽에
_CRT_SECURE_NO_WARNINGS;
를 입력해 주시고 속성 창에서 확인 버튼을 눌러 빠져나오시면 됩니다.





해결 방법 3.



솔루션 탐색기에서 프로그램을 우클릭 후 속성을 눌러 속성 창을 열어줍니다.





속성페이지 위쪽에서
구성을  "모든 구성"
플랫폼을 "모든 플랫폼" 으로 맞춘 뒤
좌측 트리에서
구성속성 -> C/C++ -> 고급을 선택해 줍니다.
오른쪽에 나오는 속성 값들 중 "특정 경고 사용 안 함"
가장 앞쪽에
4996;
을 입력해 주시고 속성 창에서 확인 버튼을 눌러 빠져나오시면 됩니다.



해결 방법 4.




솔루션 탐색기에서 프로그램을 우클릭 후 속성을 눌러 속성 창을 열어줍니다.





속성페이지 위쪽에서
구성을  "모든 구성"
플랫폼을 "모든 플랫폼" 으로 맞춘 뒤
좌측 트리에서
구성속성 -> C/C++ -> 일반을 선택해 줍니다.
오른쪽에 나오는 속성 값들 중 "SDL 검사"
의 값을 아니요(/sdl-) 를 선택해 주시고
확인 버튼을 눌러 빠져나오시면 됩니다.




각 해결방법 중 하나 선택 하여 따라하신 뒤
다시 빌드하시면 됩니다.
해결방법 1은 별로 추천 안함.

댓글 없음:

댓글 쓰기

목록