将stdout C文件流重定向到缓冲区

时间:2014-01-27 11:55:48

标签: c windows stdout

有没有办法将 stdout 文件流(C stdout)重定向到Windows中的缓冲区?

唯一对我有用的是:

FILE *fp = freopen("output.txt", "w", stdout);
printf("Hello\n");
fclose(fp);

但我总是要回读文件以获取缓冲区内容。有没有办法直接将其重定向到内存缓冲区?

1 个答案:

答案 0 :(得分:1)

您可以将所有printf替换为myprintf,其中myprintf将是一个类似于fprintf的函数,但将输出写入缓冲区。 myprintf本质上会使用vsprintf将输出输入char缓冲区,然后输入内存缓冲区。

这是一个非常简单而天真的概念实现,没有错误检查只是为了给你一个想法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

void myprintf(char *mybuffer, const char *format, ...)
{
  va_list args;
  va_start (args, format);

  char tempbuffer[100] ;
  vsprintf (tempbuffer, format, args);

  strcat(mybuffer, tempbuffer) ;
  va_end (args);
}

int main()
{
  char buffer[100] ;
  buffer[0] = 0 ;

  myprintf (buffer, "Hello world!\n") ;
  myprintf (buffer, "Hello %s %d", "world", 123) ;

  printf (buffer) ; 
  return 0 ;
}