void TestPrint(char* format, ...)
{
va_list argList;
va_start(argList, format);
printf(format, argList);
va_end(argList);
}
int main()
{
TestPrint("Test print %s %d\n", "string", 55);
return 0;
}
我需要得到:
Test print string 55
实际上,我得到的是垃圾输出。这段代码有什么问题?
5条答案
按热度按时间igsr9ssn1#
使用
vprintf()
代替。mzsu5hc02#
除了
printf
,我建议您尝试vprintf
,它是为此特定目的而创建的:Source
ajsxfq5m3#
正如其他人已经指出的:在这种情况下,应该使用
vprintf
。但是如果你真的想 Package
printf
,或者想 Package 一个没有v...
版本的函数,你可以在GCC中使用非标准的__builtin_apply
特性来实现:__builtin_apply
的最后一个参数是max。以字节为单位的参数的总大小。请确保在这里使用足够大的值。wbgh16ku4#
这不是你使用
printf()
的方式。如果您想使用va_lists
,请使用vprintf()
。查看here以获得参考。p4tfgftt5#
对于任何人谁需要更普遍的解决方案-尝试这个模板函数: