savostin
@savostin
Еще один программист

Есть ли sprintf с массивом параметров формата?

Хочется странного...

Есть строка вида "Что-то: %s, всякое: %d, разное: %0.2f", которая получается извне (т.е. количество аргументов формата неизвестно) и соответствующего размера (и типов) "массив" значений, которые нужно подставить в соответствующие места.

Надо сделать "sprintf".

Пока только приходит на ум
sprintf(buf, fmt, par[0], par[1], par[2], par[3], par[4], и так далее до X, а если мало, то до Y);

Или есть в природе sprintf, который подставляет только первый параметр, не трогая остальные (тогда это можно сделать в цикле).

В крайнем случае можно ограничиться только %s, т.к. значения все равно получаются в виде строк.
Boost по ряду причин тянуть не хочется (хотя бы потому, что это уже давно не один заголовочный файл, а куча зависимостей, хоть и внутренних).
  • Вопрос задан
  • 2662 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Есть строка вида "Что-то: %s, всякое: %d, разное: %0.2f", которая получается извне (т.е. количество аргументов формата неизвестно)

Это может стать серьёзной уязвимостью, потому что у sprintf есть, например, %n, записывающий в память по адресу в переданном параметре.

Boost по ряду причин тянуть не хочется

Если у вас всё равно С++, может подойдёт std::ostringstream?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы