#include <cstdio>
#include <cstdarg>
#include <string>
#include <vector>
size_t std_sprintf(std::string& str, const char* fmt, ...)
{
va_list args0, args1;
va_start(args0, fmt);
va_copy(args1, args0); // 备份参数列表,否则GCC平台可能会core掉
size_t num_of_chars = std::vsnprintf(nullptr, 0, fmt, args0);
va_end(args0);
#if 1
str.resize(num_of_chars + 1, '\0');
std::vsnprintf(const_cast<char*>(str.data()), str.size(), fmt, args1);
str.resize(num_of_chars);
#else
std::vector<char> buf(num_of_chars + 1, '\0');
std::vsnprintf(buf.data(), buf.size(), fmt, args1);
str.assign(buf.data());
#endif
va_end(args1);
return num_of_chars;
}
std::string跨平台格式化函数实现代码
最新推荐文章于 2024-03-23 10:29:53 发布