我试图读取包含结构的二进制文件的最后一个条目。 (我正在研究Turboc ++,因为我的学校用它来教我们)
我尝试了seekg(-sizeof(info),ios::end)
,其中info
是结构,但它没有给我所需的输出。
但是当我做seekg(-4,ios::end)
时,(info
大小为4)它可以正常工作。
即使seekg(sizeof(info),ios::beg)
工作正常(这是否以错误的方式检查我是否正在使用sizeof())
以下程序(我在turboc ++上写的)演示了我面临的问题(虽然这不是我正在研究的实际程序)
#include<iostream.h>
#include<fstream.h>
struct info{
int age, num;
};
int main()
{
info p1,p2;
ofstream fout("NEWF",ios::out|ios::binary|ios::trunc);
ifstream fin;
p1.num=2; p1.age=20;
fout.write((char*)&p1,sizeof(info));
p1.num=4; p1.age=20;
fout.write((char*)&p1,sizeof(info));
fout.close();
fin.open("NEWF",ios::in|ios::binary);
fin.seekg(-sizeof(info),ios::end); //trying to access last entry
// int nsize= -sizeof(info);
// fin.seekg(nsize,ios::end); <--- This works
fin.read((char*)&p2,sizeof(info));
cout<<p2.num<<" "<<p2.age;
return 0;
}
我得到的输出是: 1532 1556 , 预期输出为: 4 20
我确实经历过与seekg()相关人员已经提出的许多类似问题,但我找不到我想要的东西。