C 打印到缓冲区或文件重用代码
我想定义两个函数fdump和sdump,分别使用fprintf和sprintf将结构转储到文件或缓冲区 有没有一种方法可以在不重复两个函数中的代码的情况下定义它们? 一种解决方案可以是定义sdump,然后在此基础上定义fdump,即:C 打印到缓冲区或文件重用代码,c,C,我想定义两个函数fdump和sdump,分别使用fprintf和sprintf将结构转储到文件或缓冲区 有没有一种方法可以在不重复两个函数中的代码的情况下定义它们? 一种解决方案可以是定义sdump,然后在此基础上定义fdump,即: void fdump(FILE* f, struct mystruct* param) { char buffer[MAX]; sdump(buffer, MAX, param); fprint(f, "%s", buffer); } 但这种溶液会浪
void fdump(FILE* f, struct mystruct* param) {
char buffer[MAX];
sdump(buffer, MAX, param);
fprint(f, "%s", buffer);
}
但这种溶液会浪费时间和中间缓冲液。虽然fprintf可能也会这样做。另一种解决方案是通过预处理宏,但它看起来相当复杂。拜托,有什么想法吗
提前感谢您可以使用
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;
}
#包括
无效foo(文件*fh){
fprintf(fh,“测试”);
}
int main(){
foo(stderr);
char-str[100];
文件*mem=fmemopen(str,sizeof str,“w”);
foo(mem);
fclose(mem);
fprintf(stdout,“%s”,str);
返回0;
}
它还没有写出来。但它只会将结构字段的名称及其值打印到缓冲区。