gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:25:15 26 4
gpt4 key购买 nike

我想定义两个函数,fdump 和 sdump,分别使用 fprintf 和 sprintf 将结构转储到文件或缓冲区。

有没有办法在不重复两个函数中的代码的情况下定义它们?一种解决方案是定义 sdump,然后基于它定义 fdump,即:

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

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

提前致谢

最佳答案

您可以使用 fmemopen 为您提供一个指向一 block 内存的文件句柄,然后只编写一个接受文件句柄的函数版本:

#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;
}

关于c - 打印到缓冲区或文件重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com