【问题标题】:passing variable parameter list to syslog将可变参数列表传递给 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

有人有想法吗?

【问题讨论】:

    标签: c++ parameter-passing syslog


    【解决方案1】:

    您应该使用vsyslog,而不是syslog。 syslog 接收可变参数包,但不接收va_list。如果你想调用syslog,你应该按原样传递参数,而不是va_list。

    【讨论】:

    • +1 优于通过 vsnprintf + malloc 管理缓冲区,一周中的任何一天和周日两次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多