Today
Total
Recent Posts
Recent Comments
Archives
05-19 03:21
«   2024/05   »
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 31
반응형
관리 메뉴

UD_park's IT story

[Error] Error C4996: 'scanf' 본문

IT - For Data/Error

[Error] Error C4996: 'scanf'

kingllzn 2018. 6. 28. 14:57
반응형
SMALL

이번에 다룰 오류는 바로 scanf입니다

제가 다루고 있는 C++이나 C#에서 자주

사용되는게 아니라 C에서 값을 입력받을 때,

자주 사용되는 함수 입니다

 

일단 오류 표시줄을 보면서

설명 이어가도록 하겠습니다

 

 

심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태 오류 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

이어서 Visual Studio의 오류 목록의 화면으로

내용을 파악해보겠습니다

 

 

위와 같이 오류가 발생하면 그럼

어떻게 해결해야 하는지에 대해

이야기를 시작해 보겠습니다

 

사실 지금의 C++와 C#을 하기전에

저는 C언어를 많이 다뤘기에

위의 오류를 자주 겪었었습니다

 

 

해결 방법은 제가 이전에 올렸던

아래의 포스팅 내용과 비슷합니다

 

2018/06/28 - [Work & Study/Error] - [Error] Error C4996: 'strcpy' 'strcat'

 

위의 포스팅 내용과 거의 흡사합니다

(오류의 해결 방법이 흡사하여

이전 포스팅 내용을 참고해

수정하여 작성했습니다)

 

 

① scanf 대신 scanf_s 사용

- 말 그대로 오류 목록의 설명을 따라서

scanf 대신에 scanf_s를 써주면 오류는

자연스럽게 사라집니다

다만, Warning 이라는 경고 정도의 표시만

나타날 뿐입니다

 

사진으로 보시겠습니다

빨간색으로 밑 줄친 부분에서

오류가 발생되어 동작을 하지 않습니다

따라서, 위의 scanf를 scanf_s로

아래의 화면과 같이 바꿔줍니다

 

이렇게 하면 오류의 문제점들을

해결할 수 있지만 만약 소스 코드가

길다면 모든 scanf를 찾아 이렇게

바꿔줘야 하는 번거로움이 있습니다

 

 

② 위의 오류에 대한 무시 방법

- 공부 목적으로 코드 소스 하시는 분들이

대부분 이시기에 딱히 보안성을 생각할 필요는

없습니다. 그렇기에 위의 보안성에 대한

문제를 무시하는 방법입니다

 

앞서 말씀드린 코드가 길고, 회사가 아닌

혼자 공부하는 용도일 때는 지금 알려드릴

방법을 쓰시는 것을 추천합니다  

 

⒜ #define _CRT_SECURE_NO_WARNINGS

 - define으로 안전성과 보안에 대한 경고를

무시하는 정의와 선언을 해버리는 방법입니다

 

 

위와 같이 define으로 선언해주시면

간단하게 오류를 해결할 수 있습니다

 

 

⒝ 두 번째 방법은 설정창에 설정을 바꿔

오류를 해결하는 방법으로 사진으로 쉽게

설명해 드리겠습니다

 

 

위쪽의 목록들 중에서 프로젝트를 선택해

클릭합니다

 

 

목록 중에서 해당 프로젝트의 속성을

선택하여 클릭합니다

 

 

왼쪽의 C/C++을 클릭하고, 그 밑에 있는

전처리기를 클릭하고, 전처리기 정의를 선택합니다

 

 

전처리기 정의를 클릭하여 편집을 클릭합니다

 

 

아래의 화면과 같이 밑 줄친 문장인

_CRT_SECURE_NO_WARNINIGS 를 입력하고

확인을 클릭합니다

 

 

이렇게 하면

⒜ #define _CRT_SECURE_NO_WARNINGS 과 같은

원리로 오류가 발생하지 않습니다

 

이전 포스팅에서 다룰 때 했던 말처럼 

두 가지 모두 큰 차이는 없기에 어떤 방법을 쓰시던

딱히 상관은 없습니다

 

이상 Error C4996: 'strcpy' 'strcat' 오류에 대한

포스팅을 마치도록 하겠습니다

 

 

혹시 다른것에 대해 궁금하신게

있으시다면

댓글에 달아주세요

 

아는것이면 친절하게 쉽게

모르는것이면 또 제가 알아내서

친절하게 쉽게 포스팅해서

설명해드리겠습니다

 

 

 

 

 

반응형
LIST
Comments