fread执行会让文件内部指针位置移动。但是我的代码出现这样的情况,请经验人士指教
while(fread(ptr,sizeof(structstudent),1,pi)>0){Insert(stu,ptr);fwrite(ptr,sizeof(stru...
while(fread(ptr,sizeof(struct student),1,pi)>0){
Insert(stu,ptr);
fwrite(ptr,sizeof(struct student),1,save);
fread(ptr,sizeof(struct student),1,pi);
}
不要质疑,我的代码功能是连续从A读出,连续写入B,一切正常。
问题一、按照ANSI C rationale,fread会让文件内部指针移动count*size个字节,准备后续操作。while里面执行了一次fread,while里面就不应该执行了,避免文件内部指针错位,影响连续读入的效果,但是事实上我的代码是正确的。这是为什么?同样质疑fread是否会移动文件内部指针的代码我的程序里还有。我参考了《C标准库中文版》,里面也说用fread和fwrite时候在存取方面很可能无法准确控制,因为文件存储空间不会准确识别是否被存入数据,《C专家编程>对此没有说明。《C primer 第五版》里面只是一带而过,没有说明。《C语言实战105例》里面有提到对同一个文件连续读写时候中间要使用fseek转换文件状态。可是我的例子是读一个文件同时写另一个文件。是我的程序设计问题还是有什么东西是书上没有提到的?请经验人士指教。
问题二、在文件打开后,如果判断读取时候失败,退出语句块前是否有必要执行fclose一下关闭文件? 展开
Insert(stu,ptr);
fwrite(ptr,sizeof(struct student),1,save);
fread(ptr,sizeof(struct student),1,pi);
}
不要质疑,我的代码功能是连续从A读出,连续写入B,一切正常。
问题一、按照ANSI C rationale,fread会让文件内部指针移动count*size个字节,准备后续操作。while里面执行了一次fread,while里面就不应该执行了,避免文件内部指针错位,影响连续读入的效果,但是事实上我的代码是正确的。这是为什么?同样质疑fread是否会移动文件内部指针的代码我的程序里还有。我参考了《C标准库中文版》,里面也说用fread和fwrite时候在存取方面很可能无法准确控制,因为文件存储空间不会准确识别是否被存入数据,《C专家编程>对此没有说明。《C primer 第五版》里面只是一带而过,没有说明。《C语言实战105例》里面有提到对同一个文件连续读写时候中间要使用fseek转换文件状态。可是我的例子是读一个文件同时写另一个文件。是我的程序设计问题还是有什么东西是书上没有提到的?请经验人士指教。
问题二、在文件打开后,如果判断读取时候失败,退出语句块前是否有必要执行fclose一下关闭文件? 展开
3个回答
展开全部
第二个fread用来干什么的?
每个成功的fopen都要有对应的fclose
每个成功的fopen都要有对应的fclose
追问
第二个fread是用来移动文件内部指针的。不然这个代码会同一条记录读两次。
就是说不需要fclose了?
追答
pi=fopen(...);
if(pi!=NULL)
{
while(fread(ptr,sizeof(struct student),1,pi)>0){
Insert(stu,ptr);
fwrite(ptr,sizeof(struct student),1,save);
}
fclose(pi);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题一,不明白你的问题是?
问题二,肯定的关,这是好习惯。
问题二,肯定的关,这是好习惯。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询