打印到缓冲区或文件重用代码

ldo*_*oso 6 c

我想定义两个函数,fdump和sdump,在每种情况下使用fprintf和sprintf将结构转储到文件或缓冲区.

有没有办法定义它们而不重复两个函数中的代码?一个解决方案可以定义sdump,然后基于它定义fdump,ei:

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

但该解决方案浪费和中间缓冲区.虽然fprintf可能会做同样的事情.其他解决方案可以通过预处理宏来实现,但看起来相当复杂.请问,有什么想法吗?

提前致谢

Fle*_*exo 3

您可以使用fmemopen给您一个指向一块内存的文件句柄,然后只编写一个采用文件句柄的函数版本:

#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;
}
Run Code Online (Sandbox Code Playgroud)