【发布时间】:2009-05-22 22:47:15
【问题描述】:
一个困扰我的谜题。在一些简单的测试工具代码中,如果我将太多字符流式传输到标准输出,程序就会失败。奇怪但非常可重复。这可能是 Windows 独有的问题,但很容易看出:
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char> d;
char c;
while (cin.get(c)) d.push_back(c);
for (deque<char>::reverse_iterator j = d.rbegin(); j != d.rend(); j++)
cout << (*j);
}
前面的代码只是从标准输入加载一个字符流并以相反的顺序输出它们。它适用于最多 100K 左右的字符,但对于较大的文件,在 Windows 中会因“错误写入标准输出”消息而死。它总是以相同的角色死去。 像“cat bigfile.txt | reverse.exe”这样的 shell 命令就是重现问题所需要的。 MSFT 和 Intel 编译器的行为都类似。
我知道标准输出上可能有一个缓冲区,但是当它被填满时不应该自动刷新吗?
【问题讨论】:
-
我认为您需要提供有关您正在运行的编译器版本、操作系统和内存的更多详细信息。至少我们中的一些人没有看到这个问题。
-
另外,尝试使用类似“reverse.exe