[질문] snprintf 와 _snprintf의 차이?

ghzradio의 이미지


앞에 언더바 차이 뿐인데.. 구체적인 차이점이 뭘까요?

그리고 비슷한 함수들도 많던데, _s가 접미사로 사용된것도 있더군요.

이런것 모두 정리된 한글싸이트는 없을까요?

아무튼.. 답변 부탁드립니다~

전 WIN32API 와 MFC를 VC6.0과 VS2005로 공부하고 있습니다...

eungkyu의 이미지

보통 _가 붙은 것들은 표준에 부합하지 않는 것이고, _가 없는 것은 표준에 부합하는 것입니다.
MSDN에서 printf을 찾아서 Requirements의 Compatibility를 보면 ANSI가 있습니다.
그런데 _snprintf를 찾아서 보면 ANSI가 없죠.

MSDN에서 ANSI라 하는 것은 C89, C99 등 C 표준을 의미하는 것으로 보입니다.

즉, MS의 printf는 C표준을 완전히 준수하는 함수이지만 _snprintf는 C표준을 완전히 준수하지 않습니다.

실제로 C99에는 snprintf가 정의되어있는데, MS의 _snprintf는 비슷하지만 미묘하게 다릅니다.
기본적인 처리는 비슷한데 예외처리를 하다보면 차이점을 느낄 수 있을 것입니다.

예전에 _snprintf가 snprintf와 비슷하게 동작하도록 wrapper를 짰던 기억이 새록새록하군요 =_=

pokev25의 이미지

_s는 버퍼의 길이를 주는 것입니다.

그래서 dest의 길이를 넘어서는 오버플로우를 막지요.