将可变参数列表传递给 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,而不是syslogsyslog 接收可变参数包,但不接收va_list。如果你想调用syslog,你应该按原样传递参数,而不是va_list

【讨论】:

+1 优于通过 vsnprintf + malloc 管理缓冲区,一周中的任何一天和周日两次。

以上是关于将可变参数列表传递给 syslog的主要内容,如果未能解决你的问题,请参考以下文章

如何将非可变参数值传递给 fmt::format?

将数组传递给 TypeScript 中的可变参数函数

可变参数模板调度程序

将可变参数模板参数包传递给下一个函数

为啥我不能将模板函数指针传递给可变参数函数?

一文读懂《Effective Java》第42条:慎用可变参数