6

fdump と sdump の 2 つの関数を定義して、それぞれの場合で fprintf と sprintf を使用して、構造体をファイルまたはバッファーにダンプします。

2 つの関数でコードを繰り返さずに定義する方法はありますか? 1 つの解決策は、sdump を定義してから、それに基づいて fdump を定義することです。ei:

void fdump(FILE* f, struct mystruct* param) {
  char buffer[MAX];
  sdump(buffer, MAX, param);
  fprint(f, "%s", buffer);
}

しかし、その解決策は無駄と中間バッファーです。たぶん fprintf も同じことをしますが。他の解決策はマクロの前処理によるものかもしれませんが、かなり複雑に見えます。何かアイデアはありますか?

前もって感謝します

4

1 に答える 1

3

を使用fmemopenして、メモリのチャンクを指すファイル ハンドルを指定し、ファイル ハンドルを受け取る関数のバージョンを 1 つだけ記述できます。

#include <stdio.h>

void foo(FILE *fh) {
  fprintf(fh, "test\n");
}

int main() {
  foo(stderr);
  char str[100];
  FILE *mem = fmemopen(str, sizeof str, "w");
  foo(mem);
  fclose(mem);
  fprintf(stdout, "%s", str);
  return 0;
}
于 2012-07-30T15:29:05.387 に答える