1

我正在寻找一个函数来替换 fprintf

int fprintf ( FILE * stream, const char * format, ... );

我不确定如何定义这样的函数,因为在格式参数之后,该函数采用可变数量的参数。具体来说,它至少需要与格式中指定的一样多的附加参数。

更新我找到了有关该主题的资源(http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html),但该示例似乎无法在我正在使用的操作系统Linux下编译。

一个只调用 fprintf 的 fprintf 替换示例会很有帮助。

这不是家庭作业。我只是一个试图在空闲时间学习如何编程的初学者。谢谢!

4

1 回答 1

8

fprintf您不需要直接调用,而是需要调用vfprintf。例如:

#include <stdarg.h>
int myfprintf(FILE *stream, const char *format, ...) {
    va_list args;
    va_start(args, format);
    int r = vfprintf(stream, format, args);
    va_end(args);
    return r;
}

在标准库中,每个接受 varargs ( ...) 的函数也有一个v接受参数的相同函数的版本va_list。由于您无法构造要...动态传递的参数,因此您需要使用v变体来传递可变参数。

于 2009-12-06T05:27:48.687 回答