2011. 10. 14. 16:08

concat과 printf를 동시에 수행하는 함수 공유



위 함수는 하나의 buffer에 printf를 concat하면서 진행합니다.
strsafe 함수군을 사용하므로, #include <strsafe.h>를 include 선언 마지막에 추가해야 합니다.
(ANSI 전용 함수만 공유합니다. StringCchPrintf와 _tcslen으로 변경하면, TCHAR 사용 가능합니다.)

파라미터 설명보다 아래 사용예를 보시는것이 편합니다.

막 사용한 예)

CHAR sz[35] = {0,};
INT nPos = 0;
StringCbVPrintfAppendA(sz, 35, nPos, &nPos, "__%s, %d__", "abc", 555);
StringCbVPrintfAppendA(sz, 35, nPos, &nPos, "****%s, %d****", "abc", 1111);
StringCbVPrintfAppendA(sz, 35, nPos, &nPos, "@%s, %d@", "qwerty", 1231);
StringCbVPrintfAppendA(sz, 35, nPos, &nPos, "@%s, %d@", "qwerty", 1231);

가 되면,

__abc,555__ ==> __abc,555__***abc, 1111**** => __abc,555__***abc, 1111**** => __abc,555__***abc, 1111****
와 같이 sz값이 변경됩니다.
즉, 넘치게 되면 추가되지 않습니다.

리턴값이 ERROR_SUCCESS 이면 제대로 성공한 것이고,
위와 같이 버퍼가 모자란 경우에는 ERROR_MORE_DATA가 리턴됩니다.
해당값이 리턴되면, 버퍼의 크기를 늘려서 다시 호출하면 됩니다. :)