C++ FileIO 的奇怪行为

C++ FileIO weird behaviour

本文关键字:FileIO C++      更新时间:2023-10-16

在编写程序时,我遇到了奇怪的std::ofstream行为。请参考下面的代码

ofstream dire;
dire.open("dir.txt", std::ios::out);
// some other code
for(int i=0;i<dir.size();i++)
{
    dire << dir[i] << "t"; // dir is integer vector containing values between 0-9
}

现在当我打开dir.txt内容时:

ऴऴऴऴवववववववववशशशशशशशशशशषषषषषषषषरररररररऱऱऱऱऱऱऱऱऱललललललललललललळ.. and so on

如果我给一个空格,然后 tab(\t),那么它就可以正常工作,或者 也可以正常工作。 dire << dir[i] << " t";

现在输出是:

4   4   4   4   5   5   5   5   5   5.. and so on

我也尝试dire.flush()将输出缓冲区刷新到文件,但结果仍然相同。

我绝对可以通过使用t来逃脱,但我想了解为什么会发生这种情况。

如果您使用记事本查看文件,那么布什隐藏事实的错误可能是问题所在。

当字符串传递到 Win32 字符集检测函数 IsTextUnicode 时,没有其他字符,则会发生此错误。IsTextUnicode 看到它认为有效的 UTF-16LE 中文并返回 true,然后应用程序错误地将文本解释为 UTF-16LE。