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);
这样的事情,但我找不到解决方案。
答案 0 :(得分:9)
这是一个执行此操作的简单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 */
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:5)
您要使用的是vsprintf它接受va_list
参数并且有样本
链接上MSDN上的代码。
编辑: 您应该考虑_vsnprintf,这将有助于避免vsprintf乐意创建的缓冲区溢出问题。
答案 2 :(得分:2)
通常会调用函数的变量args版本,该版本接受va_list
。例如_snwprintf
内部调用_vsnwprintf
;试着调用它。
答案 3 :(得分:2)
其他人已经向您指出了vprintf
- 函数系列,但如果您想熟悉其他常见问题条目,comp3.lang.c常见问题还可以(毫不奇怪)回答这个问题。 。 (他们值得一读,IMO。)