본문 바로가기

Visual Studio

[Visual Studio] 함수명_s 오류 관련, 오류 메시지 보이지 않게 하기(_CRT_SECURE_NO_WARNINGS 경고 or 에러, error C4996)

반응형

_CRT_SECURE_NO_WARNINGS 이 경고는 Visual C++ 2005 버전부터 만들어졌다.

이전 라이브러리에서 보완에 취약한 부분을 보완해서 _s가 붙은 라이브러리로 대체를 해야 한다는 뜻이다.

[방법1]

소스코드 첫 부분에

#define _CRT_SECURE_NO_WARNINGS

이렇게 한 줄을 추가하면 _s가 없는 것이 _s가 있는 것으로 자동으로 맵핑이 됨. (불확실)

[방법2]

소스코드 첫 부분에

#pragma warning(disable:4996)

이 줄을 추가하면 컴파일러가 경고를 내지 못하게 하는 역할.

[방법3]

프로젝트 속성에서 왼쪽 C/C++ 항목에서 전처리기에 있는 전처리기 정의에 '_CRT_SECURE_NO_WARNINGS'를 추가.

(또는 프로젝트를 선택한 후 Alt + F7)

가장 좋은 방법은 _s가 붙은 해당 함수를 사용.

대부분 _s가 뒤에 붙은 함수는 보안을 위해 인자가 한 개 늘어났다.

하지만 코드를 이식해야 되는 상황이 빈번하다면 얘기는 달라진다.

_s가 붙은 함수는 Visual Studio에서만 사용이 가능한 함수로 이식성 면에서 좋지않고

%c와 %s말고 나머지는 scanf와 동일하기 때문에 scanf를 사용하는 것이 좋다.

따라서, scanf_s를 쓰기 보다는 scanf의 인자 형식을 통해 메모리 오버플로우가 나지 않도록 하거나...

(참조 - scanf 매개변수(인자)의 형식 바로가기!!!)

아니면 다른 방법을 찾아서 해야한다.

그리고 분야에 따라 다르겠지만 scanf는 현업에서는 거의 사용되지 않기 때문에 기초를 공부하는 입장에서는 신경쓰지 말고

'#pragma warning (disable : 4996)'을 추가하여 넘어가는 것을 추천한다.

반응형