我在Visual Studio 2015中使用iostream进行了一些基本的文件操作,并注意到了这种奇怪的行为。
#include <fstream>
#include <iostream>
#include <sstream>
void main(int argc, char** argv)
{
std::wifstream stream("example.txt");
//std::ifstream stream("example.txt");
//std::wstringstream stream(L"abcdefghijklmnopqrstuvxyz");
std::wcout << (char)stream.peek() << "\n"; // a
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // b
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // c
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // d
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // e
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // f
stream.tellg();
std::wcout << (char)stream.peek() << "\n"; // g
stream.tellg();
}
example.txt包含:
abcdefghijklmnopqrstuvxyz
似乎stream.tellg()
将流的当前字符提前一个。这仅适用于std::wifstream
。似乎std::ifstream
和std::wstringstream
不会受到影响。
这是visual studio stl实现中的错误吗?
答案 0 :(得分:0)
此问题与wifstream/wfstream implementation bug in Visual C++ 2010类似。
斯蒂芬说:
调用tellg()时,C ++ Standard不提供行为保证 在文本模式下打开的文件。
我想这就是原因。