1

fprintf を置き換える関数を書きたいと思っています

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

このような関数を定義する方法がわかりません。なぜなら、この関数は format パラメータの後に可変数のパラメータを取るからです。具体的には、少なくともフォーマットで指定されたのと同じ数の追加の引数を取ります。

更新この件に関するリソース ( http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html ) を見つけましたが、この例は、私が使用している OS である 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 に答える