Вот хорошая функция для c ++ sprintf.Потоки могут выглядеть ужасно, если вы используете их слишком интенсивно.
std::string string_format(const std::string &fmt, ...) {
int n, size=100;
std::string str;
va_list ap;
while (1) {
str.resize(size);
va_start(ap, fmt);
int n = vsnprintf(&str[0], size, fmt.c_str(), ap);
va_end(ap);
if (n > -1 && n < size)
return str;
if (n > -1)
size = n + 1;
else
size *= 2;
}
}
В C ++ 11 и более поздних версиях std :: string гарантированно будет использовать непрерывное хранилище, которое заканчивается на '\0'
, поэтомуприведите его к char *
, используя &str[0]
.