将可变参数列表传递给 syslog
Posted
技术标签:
【中文标题】将可变参数列表传递给 syslog【英文标题】:passing variable parameter list to syslog 【发布时间】:2014-08-18 06:43:48 【问题描述】:我尝试将可变参数列表传递给另一个函数。已经有一个非常相似的问题:How to pass variable number of arguments to printf/sprintf 但对我来说它不起作用。我不知道为什么。这是我的功能:
void printSyslogNotice(const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
#ifdef __XENO__
rt_syslog(LOG_NOTICE, fmt, ap);
#else
syslog(LOG_NOTICE, fmt, ap);
#endif
va_end(ap);
当我调用它时:
printSyslogNotice("%s %i", "hello world", 5);
我得到这个输出:#010 -939524064
不用说,我想要这个输出:hello world 5
有人有想法吗?
【问题讨论】:
【参考方案1】:您应该使用vsyslog
,而不是syslog
。 syslog
接收可变参数包,但不接收va_list
。如果你想调用syslog
,你应该按原样传递参数,而不是va_list
。
【讨论】:
+1 优于通过 vsnprintf + malloc 管理缓冲区,一周中的任何一天和周日两次。以上是关于将可变参数列表传递给 syslog的主要内容,如果未能解决你的问题,请参考以下文章