我在此代码中识别EOF时遇到一些问题。文件table.bin
包含表示16位整数的字节对。它们被分成由两个0x0字节分隔的组。
代码正确读取文件中的所有数据,然后以某种方式在表中插入{ 0xF00D, {} }
键/值对,表示它读取的数据超出了应有的数据。我如何正确检查EOF?
UChar
是std::uint16_t
std::map<UChar, std::vector<UChar>> table;
std::vector<UChar> v;
std::ifstream ifs("table.bin", std::ios::binary);
UChar n;
while (ifs.read(reinterpret_cast<char*>(&n), sizeof n))
{
if (n != 0x0)
v.push_back(n);
else
{
table.insert(std::make_pair(v.front(), v));
v.clear();
}
}
答案 0 :(得分:0)
进一步检查您的代码,问题似乎不是您检查EOF的方式。即使您的信息流末尾有虚假数据,也不会读取这些数据,除非它们是sizeof n
的倍数。
如果您找到两个0
值,会发生什么?你的第二个v.front()
会导致未定义的行为(你在之前的0上清除了v),这是我对map
中找到无关数据这一事实的唯一想法。因此,请检查您的数据,并向我们提供相关信息。