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; }