为函数编写替换函数,该函数采用可变数量的参数(c编程)

时间:2009-12-06 05:13:19

标签: c parameters variadic-functions printf

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

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

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

更新我在主题(http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html)上找到了一个资源,但是这个示例似乎不能在我正在使用的操作系统Linux下编译。

替换fprintf只是调用fprintf会有所帮助。

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

1 个答案:

答案 0 :(得分: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变量传递varargs。