Listing 5
inline int vstrprintf(string* pString, const char* pFmt, va_list args)
{
// prologue
static const size_t ChunkSize = 1024;
int retval = 0;
// get local work buffer
size_t nBufSize = 0;
char* pBuf = 0;
// format up string
int i = -1;
for( ; i == -1; )
{
// realloc local buffer
if( pBuf )
delete pBuf;
pBuf = new char[nBufSize+=ChunkSize];
// try to sprintf
i = _vsnprintf(pBuf,nBufSize,pFmt,args);
}
retval = i;
// epilogue
pString->assign(pBuf,retval);
delete pBuf;
return retval;
};
inline int strprintf(string* pString, const char * pFmt, ...)
{
va_list args;
va_start(args, pFmt);
int retval = vstrprintf(pString, pFmt, args);
va_end(args);
return retval;
}