我想定义两个函数fdump和sdump,在每种情况下使用fprintf和sprintf将结构转储到文件或缓冲区。
有没有办法定义它们而不重复两个函数中的代码? 一种解决方案可以是定义sdump,然后根据它来定义fdump,e.i。:
void fdump(FILE* f, struct mystruct* param) {
char buffer[MAX];
sdump(buffer, MAX, param);
fprint(f, "%s", buffer);
}
但该解决方案浪费和中间缓冲区。虽然fprintf可能会做同样的事情。其他解决方案可以通过预处理宏来实现,但看起来相当复杂。请问,有什么想法吗?
提前致谢
答案 0 :(得分: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;
}