Ale*_*x F 49 c printf variadic-functions
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;
}
Run Code Online (Sandbox Code Playgroud)
我需要得到:
Test print string 55
Run Code Online (Sandbox Code Playgroud)
实际上,我得到了垃圾输出.这段代码有什么问题?
ont*_*ia_ 60
而不是printf,我建议您尝试使用vprintf,它是为此特定目的而创建的:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void errmsg( const char* format, ... )
{
va_list arglist;
printf( "Error: " );
va_start( arglist, format );
vprintf( format, arglist );
va_end( arglist );
}
int main( void )
{
errmsg( "%s %d %s", "Failed", 100, "times" );
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic = / com.qnx.doc.neutrino_lib_ref/v/vprintf.html
Cli*_*nna 22
正如其他人已经指出的那样:在这种情况下你应该使用vprintf.
但是如果你真的想要换行printf,或者想要包装一个没有v...版本的函数,你可以使用非标准__builtin_apply功能在GCC中完成:
int myfunction(char *fmt, ...)
{
void *arg = __builtin_apply_args();
void *ret = __builtin_apply((void*)printf, arg, 100);
__builtin_return(ret);
}
Run Code Online (Sandbox Code Playgroud)
最后一个参数__builtin_apply是最大值.参数的总大小(以字节为单位).确保在此处使用足够大的值.
| 归档时间: |
|
| 查看次数: |
52512 次 |
| 最近记录: |