C vfprintf函数不使用字符串参数

时间:2011-10-07 10:39:55

标签: c string printing

我正在尝试以下列方式使用vfprintf
vfprintf(fp,buffer,arg); 我使用运行的日期和时间创建的fp日志文件,缓冲区和其余的args

fp = fopen(filename, "a");
va_start(arg, message);
vprintf(message, arg); // print stdout
vfprintf(fp, buffer, arg); // print to file
va_end(arg);
fclose(fp);

它与数字完美配合,并且它因错误而死亡:vfprintf source not found at ....

有没有人知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

您可能正在使用64位架构,其中可变长度arg只能传递一次。要使用arg

复制va_copy(),请进行更多传递
va_list arg, arg2;
va_start(arg, message);
va_copy(arg2, arg);
vprintf(message, arg); // print stdout
va_end(arg);
vfprintf(fp, buffer, arg2); // print to file
va_end(arg2);

来自man va_arg

  

va_arg()宏扩展为具有类型和值的表达式          调用中的下一个参数。参数ap是va_list ap          由va_start()初始化。 每次调用va_arg()都会修改ap          下一个调用返回下一个参数。参数类型是一个类型          指定的名称,以便指向具有该对象的对象的指针类型          只需在类型中添加*即可获得指定的类型。

     

...

     

如果将ap传递给使用va_arg(ap,type)的函数,则返回值          在返回该函数后,ap未定义。