Else you can use varargs and concatenate all your szFmt into one single string, that you'll feed to f2 this way. I had the same problem once and that's how I did it.
*edit*
code always help
Code:
int function1 (const char *fmt, ...)
{
va_list argptr;
string temp_string[256];
// concatenate all the arguments in one string
va_start (argptr, fmt);
vsprintf (temp_string, fmt, argptr);
va_end (argptr);
// call f2
function2 (temp_string);
}