场景:
1. C语言有自己的sprintf函数,但是这个函数有个缺点,就是不知道需要创建多大的buffer, 这时候可以使用snprintf函数来计算大小,只要参数 buffer为NULL, count为0即可.
2. 这里实现std::string自己的sprintf也是用了snprintf的特性,先计算大小,再创建空间,之后存入std::string.
3. 还使用了C的可变参数特性.
std::wstring Format(const wchar_t *format,...)
{
va_list argptr;
va_start(argptr, format);
int count = _vsnwprintf(NULL,0,format,argptr);
va_end(argptr);
va_start(argptr, format);
wchar_t* buf = (wchar_t*)malloc(count*sizeof(wchar_t));
_vsnwprintf(buf,count,format,argptr);
va_end(argptr);
std::wstring str(buf,count);
free(buf);
return str;
}
让我们看看可变参数的声明:
typedef char * va_list;