33,311
社区成员
发帖
与我相关
我的任务
分享
#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;
}
while((ch=fgetc(file_stream))!=EOF){
ungetc(ch,file_stream);
}
就没有任何问题了。谢谢!