void printLine(const wchar_t* str, ...)
{
// have to do something to make it work
wchar_t buffer[2048];
_snwprintf(buffer, 2047, ????);
// work with buffer
}
printLine(L"%d", 123);
Я попробовал
va_list vl;
va_start(vl,str);
и вещи как это, но я не нашел решение.
Вот простой код C, который делает это, у вас будет включить stdarg.h, чтобы это работало.
void panic(const char *fmt, ...){ char buf[50]; va_list argptr; /* Set up the variable argument list here */ va_start(argptr, fmt); /* Start up variable arguments */ vsprintf(buf, fmt, argptr); /* print the variable arguments to buffer */ va_end(argptr); /* Signify end of processing of variable arguments */ fprintf(stderr, buf); /* print the message to stderr */ exit(-1); }
Типичный вызов:
panic("The file %s was not found\n", file_name); /* assume file_name is "foobar" */ /* Output would be: The file foobar was not found */
Надеюсь, это поможет, С уважением, Том.
То, что вы хотите использовать vsprintf Это принимает аргумент VA_LIST
, и есть образец
Код на MSDN в ссылке.
Править: Вы должны рассмотреть _vsnPrintf , который поможет избежать проблем переполнения буфера, которые vsprintf будет счастливо создать.
Обычно один выводит в вариабельную версию функции, которая принимает va_list
. Например _snwprintf
Внутренние вызовы _vsnwprintf
; попробуйте назвать это.
Другие люди уже указали на вас в VPRINTF
-FAMILY функций, но это также (не удивительно) отвечает PAQ COMP.LANG.C, если вы Хотите ознакомиться с другими записями FAQ. (Они стоят читать, IMO.)