是否有以下代码的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函数都不会返回长度计算,只会截断或生成错误。还有其他选择吗?
答案 0 :(得分:3)
Visual Studio提供_vscprintf
函数来检查存储结果字符串所需的缓冲区数量。