works:programmer:cpp:fast-format-string

Форматирование строки в C++ и возврат как std::string

Нашел на просторах Хабара (ссылка), оставил тут что-бы не потерять..

#include <iostream>
#include <string>
#include <vector>
 
std::string format(const char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    std::vector<char> v(1024);
    while (true) {
        va_list args2;
        va_copy(args2, args);
        int res = vsnprintf(v.data(), v.size(), fmt, args2);
        if ((res >= 0) && (res < static_cast<int>(v.size())))
        {
            va_end(args);
            va_end(args2);
            return std::string(v.data());
        }
        size_t size;
        if (res < 0)
            size = v.size() * 2;
        else
            size = static_cast<size_t>(res) + 1;
        v.clear();
        v.resize(size);
        va_end(args2);
    }
}
works/programmer/cpp/fast-format-string.txt · Last modified: 2019/04/27 17:05 by Chugreev Eugene