【发布时间】:2011-08-16 21:27:33
【问题描述】:
我使用 setbuf 将标准输出重定向到字符缓冲区 但是之后我得到了一些副作用,当我只想将新数据写入标准输出时
如下代码所述:
#define bufSize 100
int main()
{
char buf[bufSize];
setbuf(stdout, buf);
printf("123"); //123 is written to the buffer
setbuf(stdout,NULL); //123 is written to the stdout(unwanted side effect)
printf("456"); //123456 appears in the stdout
}
我该如何解决这个问题?
关于此的其他问题 - 此代码是否适用于 unix/linux/mac os?
谁能提出重定向的解决方案?
【问题讨论】:
-
我猜你必须先刷新缓冲区,然后才能将其设置为其他内容。
-
@cnicutar,它有点帮助。但没有解决问题 - 从第 4 个位置开始在标准输出中打印 456(我的意思是 123 结束的地方,还有一个差距......)跨度>
-
标准 C99 中没有办法将流重定向到自动增长的缓冲区。 TR27431-2 中有一些类似要求的机制,但它们并非在任何地方都可用。我也不确定他们是否将其纳入即将发布的 C 标准。