缺少除变量长度参数中的第一个之外的所有参数

时间:2013-12-10 13:43:00

标签: c variadic-functions

我有记录可变长度参数的函数Log。不幸的是,此函数仅记录第一个元素有什么问题?

Log(INFO,"aaa","bbb","ccc");

void Log(int level, char const * fmt, ...)
{

    int len = 4096;
    char buffer[len];
    int ret;
    va_list args;

        va_start(args, fmt);
        ret = vsnprintf(buffer, len, fmt, args);
        va_end(args);



    FILE *fOut;
    fOut = fopen(nvLog_File, "at");
    if(fOut)
        {
        fprintf(fOut,  "%s\n",buffer);//,
        printf("%s\n",buffer);
        fclose(fOut);
        } else fprintf(stderr, "can't open file %s", nvLog_File);

}

3 个答案:

答案 0 :(得分:3)

您的日志记录功能与printf()的工作方式类似。日志级别之后的第一个参数应该是格式化字符串,根据该字符串解释其余参数。要打印三个字符串,您应该使用log(INFO, "%s%s%s", "aaa", "bbb", "ccc");

答案 1 :(得分:0)

第一个字符串参数是格式。您需要指定格式化其他参数的位置/方式。尝试这样的事情:

Log(INFO, "aaa %s %s", "bbb", "ccc");

您应该查看printf样式函数的引用(例如http://www.cplusplus.com/reference/cstdio/printf/)。

答案 2 :(得分:0)

根据这个

Log(INFO,"aaa","bbb","ccc");

您传入"aaa"作为格式字符串,因此当您将其转发到printf时,您应该在日志中看到precisley。其他一切都被忽略了,因为你没有使用它。