Visual Studio 6.0 에서는 아무 문제없이 쓰던 strcpy, strcmp, sscanf, sprintf 등의 함수가 Visual Studio 2005 이상 버전에서는 warning 메시지가 뜨게 된다.


warning C4996: 'strcpy'이(가) deprecated로 선언되었습니다.



이러한 경고가 뜨는 이유는 기존의 strcpy, strcmp, sscanf, sprintf 함수들이 버퍼 핸들링이 취약하여 buffer overflow 가 일어날 보안 위험을 갖고 있기 때문이다. buffer overflow 를 이용하여 고의적으로 시스템에 overflow 를 일으켜서 해킹을 시도하는 등의 목적으로 사용될 수 있다.

MS 에서는 이러한 문제를 방지하기 위해서 기존의 string 관련 함수들의 뒤에 "_s" (s 는 secure 의 약자) 를 붙인 새로운 safe string 함수들을 제공하고 있다.


safe string 함수들은 파라미터로 버퍼의 크기를 지정하도록 되어 있는데, 이를 위해서 간단히 _countof(Array) * sizeof(Array[0]) 과 같이 버퍼 크기를 지정해 주면 편리하다.

http://msdn.microsoft.com/en-us/library/8ef0s5kh(v=VS.80).aspx


한편, 굳이 함수를 safe 함수로 변경하지 않고도 deprecated 관련 워닝을 없애는 방법은

#define _CRT_SECURE_NO_DEPRECATE

를 추가하거나


[프로젝트] → [속성] → [C/C++]  → [전처리기] 의 '전처리기 정의' 항목에 

_CRT_SECURE_NO_DEPRECATE 를 추가한다.



iPhone 에서 작성된 글입니다.
AND