LINUX.ORG.RU

C++ простой вопрос по sprintf()


0

1

Подскажите, хочется сделать небольшую обёртку для стандартной функции записи форматированной строки в переменную: sprintf(). Проблема возникает в некотором непонимании, как передать из аргументов одной функции произвольное количество параметров в другую, т.е. желаемый код выглядит примерно так:


void wrapSrpintf(const char* format, ...)
{
   char chStr[100]; // было бы неплохо конечно её сделать тойже длины, что и итоговая строка после sprintf, если sprintf сам не удлиняет её автоматически
   sprintf(chStr, /* как сюда корректно передать оставшиеся параметры из параметров функции??? */ );
   profit(chStr); 
}

А потом вызывать её в том же стиле что и sprintf() :


wrapSrpintf("it's %s %d me", "works", 4);



Последнее исправление: smalldeb (всего исправлений: 2)

Семейство функций *printf можно вызывать в C++, но только из-за его обратной совместимости с C. Это C'шные функции.

Если хочешь C++-решение то смотри на iostreams и (возможно) boost.format.

Sectoid ★★★★★
()
Ответ на: комментарий от staseg

Нет я помню, нужно взять указатель на первую переменную, потом этот указатель увеличивать, переходя на следующие переменные и в конце мы должны попасть на указатель равный нулю, что будет значить окончание списка, но тут немного нестандартная ситуация в этом смысле. Во первых есть строка, которая тоже может оканчиваться нулём, а за ней могут быть, а могут и не быть параметры и совсем не ясен даже их тип и тип может быть разный, чтобы можно было указателем по ним пройтись

smalldeb
() автор топика

C++ простой вопрос по sprintf()

Ты уж или трусы надень, или крестик сними!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от smalldeb

Епта, ну прочитай ман стдарг уже, а? Ручное бегание указателем по аргументам — хак, работающий через раз в зависимости от платформы, компилятора и погодных условий.

UPD. Example http://www.tutorialspoint.com/c_standard_library/c_function_vsprintf.htm

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от staseg

Спасибо

Да, это то что нужно. Помогло, спасибо

smalldeb
() автор топика
Ответ на: комментарий от staseg

Поддержу оратора - своими глазами видел, когда это не работает :)

batbko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.