预先计算_snprintf / _snwprintf的va_list版本的字符串长度

时间:2011-03-29 10:07:44

标签: c++ string

是否有以下代码的va_list样式版本可以安全地执行非截断的sprintf:

// format a char buffer
int size = 1 + _snprintf(NULL, 0, "%d", 132);
std::vector<char> buffer (size);
sprintf_s(&buffer[0], buffer.size (), "%d", 132);

// format a wchar_t buffer
int wsize = 1 + _snwprintf(NULL, 0, L"%d", 132);
std::vector<wchar_t> wbuffer (wsize);
swprintf_s(&wbuffer[0], wbuffer.size (), L"%d", 132);

据我从文档和实验中可以看出,所有_vsnprintf函数都不会返回长度计算,只会截断或生成错误。还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

Visual Studio提供_vscprintf函数来检查存储结果字符串所需的缓冲区数量。