Visual Studio 2005로 넘어가면서 _s 가 붙어 있는 safe 타입의 함수들로 변경하지 않으면 warning C4996 이 나타나면서 안전하지 않다면서 _s가 붙여 있는 함수를 추천해 줍니다.


wcscpy를 교체하다가 아래에 swprintf 가 있길래 이것도 _s 가 있나~ 싶어서 보니까 swprintf_s 는 없고 _swprintf_p, _swprintf_l_s 이런 함수들이 등장했습니다.


_swprintf_l_s는 로케일을 설정하기 위한 것 같고 _swprintf_p가 알맞은 형태인것 같은데 이 _p 가 뭔가 싶어서 MSDN을 뒤져보니

Positional Parameter 라는 기능이 지원된다는 의미 였습니다.


그래서 Positional Parameter가 뭔고 하니 sprintf에서 사용되는 가변 인자들의 위치를 내 마음대로 지정해 줄 수 있는 방식 이었습니다.

뭐 말로하니까 헷갈리고 설명하기도 어려우니 예제를 보면 간단하겠습니다.


_printf_p("%1$d times %1$d is %2$d", 10, 100);


이러한 형태로 사용하면 다음과 같은 형태로 출력이 가능합니다.


10 times 10 is 100


이 기능을 쓰려고 boost::format 을 사용했었는데, 이런게 있다면 이걸 사용하면 되겠네요.


출처 : 링크

+ Recent posts