一个让我印象深刻的谜题。在一些简单的测试工具代码中,如果我将太多字符流式传输到标准输出,程序就会失败。奇怪但非常可重现。这可能是 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);
}
前面的代码只是从 stdin 加载一个字符流并以相反的顺序输出它们。它适用于最多 100K 左右的字符,但对于更大的文件,它会在 Windows 中出现“错误写入标准输出”消息。它总是以相同的角色死去。 重现问题只需要一个 shell 命令,如“cat bigfile.txt | reverse.exe”。 MSFT 和 Intel 编译器的行为都相似。
我知道 stdout 上可能有一个缓冲区,但当它被填满时不应该自动刷新吗?
最佳答案
您可以尝试强制缓冲区以这种方式刷新其内容:
cout << (*j) << std::flush;
否则 std::endl
也可以工作,但也提供行尾(我想你不想要?)
关于c++ - cout流的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900319/