我有记录可变长度参数的函数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);
}
答案 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。其他一切都被忽略了,因为你没有使用它。