所有printf调用都将参数字符串写入一个字符数组

时间:2015-05-26 16:04:16

标签: c printf

如何修改我的C代码,以便printf的所有调用都将参数字符串写入一个大字符数组?

3 个答案:

答案 0 :(得分:2)

有两种方法可以实现这一目标:

  1. 不太通用 - 使用sprintf指向下一个字符位置的指针

  2. 更通用:将fprintf与变量文件指针一起使用。常规IO可以是stdout,也可以是fmemopen打开的流。请参阅GNU C库中的memory streams

答案 1 :(得分:1)

你的意思是:

char buf[N];
sprintf(&buf[0], "%d ", i);
sprintf(&buf[strlen(buf)], "%f ", f);

等?

答案 2 :(得分:0)

您可以通过实施默认printf()来覆盖默认stdio.h,并排除#define printf(...) override_printf(__VA_ARGS__) ,这会使事情变得非常困难。

另一种解决方案是编写像

这样的宏
override_printf()

困难的部分正在实施#include <stdio.h> #include <stdlib.h> #define printf(...) fprintf(stream, __VA_ARGS__) int main(void) { FILE *stream; char *content; size_t length; length = 0; stream = open_memstream(&content, &length); if (stream == NULL) return -1; printf("Hello World!\n"); printf("Just writing some text\n"); /* Don't forget to `fclose()` the stream before using the poitner */ fclose(stream); fprintf(stdout, "size: %zu\ncontent:\n%s\n", length, content); free(content); return 0; } ,但它比以前的解决方案容易得多,现在如果你可以使用 glibc 特定的 1 open_memstream(),那么这个解决方案很简单

{{1}}

1 手册页声称它可能在其他系统上可用,但它并没有广泛使用。