c++文件读写问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 21:24:27
ofstream fp(temp1,ios_base::app);fp.write((char*)&student, sizeof(student));是将结构体型的stu{int num;char name[10]};写入文件,为什么不成功 读出来时是一个负的很大数 ,stu *a;fp1.read((char*)&a, sizeof(a));读取不对吗?我打开写入的文件全是一样的?无论num 是什么 谢谢,急,必给分的!
多谢前辈 前面问题基本解决
list *alist=new list();
while(!fp1.eof())
{
fp1.read((char*)alist, sizeof(list));
show_message(alist);
}
这句为什么文件中的最后一个list 实例会显示两遍 是因为fp1.eof();吗? 另外请问如何将fp1指针回退一个list 字节,我会将我的全部积分给您的 希望您能帮我看看!谢谢!

回退一个指针,使用fseek函数即可。我原来不大常用C++的流处理文件,挺喜欢用C的库函数;不过原理一致,我给你说一下:

先计算一个list的长度:
long len = sizeof(list);

回退指针:

fseek(fp, -len, SEEK_CUR);

从当前文件指针fp所在处,向后回退len个字节。

若向前进,则取正值即可。C++的流类库应该也有相当于fseek的成员函数,你自己找找吧,用法就是如此。

显示两遍,可能是因为这句的缘故:
fp1.read((char*)alist, sizeof(list));

假设现在已经读取了最后一个list,之后调用函数把它显示出来,而文件指针并没有指向EOF,所以循环还将继续,又一次进入,之后又读文件,可是已到文件结束,所以此时fp指向了EOF,但还是要执行后面的函数,所以又打印了一遍;此时才返回到循环的条件判断出,由于fp1.eof()返回1,取非成0,循环结束。