앞에 언더바 차이 뿐인데.. 구체적인 차이점이 뭘까요?
그리고 비슷한 함수들도 많던데, _s가 접미사로 사용된것도 있더군요.
이런것 모두 정리된 한글싸이트는 없을까요?
아무튼.. 답변 부탁드립니다~
전 WIN32API 와 MFC를 VC6.0과 VS2005로 공부하고 있습니다...
보통 _가 붙은 것들은 표준에 부합하지 않는 것이고, _가 없는 것은 표준에 부합하는 것입니다. MSDN에서 printf을 찾아서 Requirements의 Compatibility를 보면 ANSI가 있습니다. 그런데 _snprintf를 찾아서 보면 ANSI가 없죠.
MSDN에서 ANSI라 하는 것은 C89, C99 등 C 표준을 의미하는 것으로 보입니다.
즉, MS의 printf는 C표준을 완전히 준수하는 함수이지만 _snprintf는 C표준을 완전히 준수하지 않습니다.
실제로 C99에는 snprintf가 정의되어있는데, MS의 _snprintf는 비슷하지만 미묘하게 다릅니다. 기본적인 처리는 비슷한데 예외처리를 하다보면 차이점을 느낄 수 있을 것입니다.
예전에 _snprintf가 snprintf와 비슷하게 동작하도록 wrapper를 짰던 기억이 새록새록하군요 =_=
_s는 버퍼의 길이를 주는 것입니다.
그래서 dest의 길이를 넘어서는 오버플로우를 막지요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
보통 _가 붙은 것들은
보통 _가 붙은 것들은 표준에 부합하지 않는 것이고, _가 없는 것은 표준에 부합하는 것입니다.
MSDN에서 printf을 찾아서 Requirements의 Compatibility를 보면 ANSI가 있습니다.
그런데 _snprintf를 찾아서 보면 ANSI가 없죠.
MSDN에서 ANSI라 하는 것은 C89, C99 등 C 표준을 의미하는 것으로 보입니다.
즉, MS의 printf는 C표준을 완전히 준수하는 함수이지만 _snprintf는 C표준을 완전히 준수하지 않습니다.
실제로 C99에는 snprintf가 정의되어있는데, MS의 _snprintf는 비슷하지만 미묘하게 다릅니다.
기본적인 처리는 비슷한데 예외처리를 하다보면 차이점을 느낄 수 있을 것입니다.
예전에 _snprintf가 snprintf와 비슷하게 동작하도록 wrapper를 짰던 기억이 새록새록하군요 =_=
_s 는 안전형식(?)
_s는 버퍼의 길이를 주는 것입니다.
그래서 dest의 길이를 넘어서는 오버플로우를 막지요.
댓글 달기