fread() 读不到EOF?

Nofico Nofico 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <stdio.h>
#define RECORD_LENGTH_ sizeof(char)*20+sizeof(unsigned int)+sizeof(double)

typedef struct RECORD_TAG{
unsigned int record_number;
long index_n; //
Detailed_record *record;
struct RECORD_TAG *fwd;
struct RECORD_TAG *bwd;
} Index;

Index index_entry;

int create_index(FILE *file_stream){
Index *new_node;
Index *current_node=&index_entry;
Index *previous_node=NULL;

rewind(file_stream);
while(!feof(file_stream)){
new_node=malloc(sizeof(Index));
if(new_node==NULL){
free_all_nodes();//如果动态分配内存失败,释放所有已分配的内存
printf("No enough memory!\n");
return 1;
}


current_node->fwd=new_node;
current_node->bwd=previous_node;
new_node->bwd=(current_node==&index_entry?NULL:current_node);
new_node->fwd=NULL;

previous_node=current_node;
current_node=current_node->fwd;

new_node->index_n=ftell(file_stream);
new_node->record=NULL;
fread(&new_node->record_number,sizeof(unsigned int),1,file_stream);
fseek(file_stream, RECORD_LENGTH_, SEEK_CUR);
}
index_entry.bwd=new_node;
return 0;
}


补充::FILE *file_stream=fopen("C:\db","a+b");。

现在的问题是,文件里面的记录为:

000000 01000000 20666666 20202020 20202020 *.... fff *
000016 20202020 20202020 0C000000 9A999999 * ........*
000032 99D95E40 01000000 2033322E 20202020 *..^@.... 32. *
000048 20202020 20202020 20202020 21000000 * !...*
000064 9A999999 99193640 02000000 20333320 *......6@.... 33 *
000080 20202020 20202020 20202020 20202020 * *
000096 2C000000 00000000 00803640 03000000 *,.........6@....*
000112 20637265 75687520 20202020 20202020 * creuhu *
000128 20202020 63000000 00000000 00C05440 * c.........T@*


前面的00....是十进制数值。调试时,ftell(file_stream)达到144以后,feof(file_stream)仍返回0;之后无论如何feof()都返回0。这是什么原因?望指点。
...全文

相关推荐

基于C语言EOF与getchar()的使用详解

希望本文可以对初学C的朋友提供一点帮助,也希望能和其他朋友进行交流。其中理解不对的地方若能得到指正和建议,本人将不胜感激

weixin_38705723

关于php fread()使用技巧

说明 string fread ( int handle, int length ) fread() 从文件指针 handle 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。 返回所读取的字符串,如果出错返回 FALSE。 复制代码 代码如下: &lt;?php // get contents of a file into a string $filename = “/usr/local/something.txt”; $h

weixin_38699593

C语言中EOF是什么意思?

如果您在看代码过程中,看到特殊的字符感觉不是关键字也不是函数,那您首先要想到的就是:这个东西是不是#define或者typedef过的呢?

weixin_38625192

EOF分析matlab代码

气象统计EOF的MATLAB程序,可以直接使用,比较容易看懂的 气象统计EOF的MATLAB程序,可以直接使用,比较容易看懂的

p0082743

c++相关技术 fread

c++ 读文件 fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

qq_28036999
评论 6
收藏 已收藏
分享
返回顶部
Nofico
新手乐园 33,315 成员 41,769 内容