一个困扰我的谜题。在一些简单的测试工具代码中,如果我将太多字符流式传输到标准输出,程序就会失败。奇怪但非常可重复。这可能是 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 编译器的行为都类似。
我意识到标准输出上可能有一个缓冲区,但是当它被填充时不应该自动刷新吗?