Visual Studio 6.0 에서는 아무 문제없이 쓰던 strcpy, strcmp, sscanf, sprintf 등의 함수가 Visual Studio 2005 이상 버전에서는 warning 메시지가 뜨게 된다.
이러한 경고가 뜨는 이유는 기존의 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 에서 작성된 글입니다.