当使用'sizeof()'和ios :: end时,seekg不起作用

时间:2017-12-29 14:33:53

标签: c++ file-io turbo-c++

我试图读取包含结构的二进制文件的最后一个条目。 (我正在研究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()相关人员已经提出的许多类似问题,但我找不到我想要的东西。

0 个答案:

没有答案