Я такие вещи через vsprintf обычно делаю
#include
#include void my_super_puper_func( int a, int b, char *fmt, ... )
{
char buf[ MAX_LEN + 1];
va_list vl;
va_start(vl, fmt);
vsnprintf_P(buf, sizeof(buf), fmt, vl);
va_end(vl);
// а тута берём строку, свои аргументы и делаем дальше
// что хочем
// ...
}