写图书管理系统,用了链表与文件,可是初始用fscanf把东西从文件导入链表总是出错,各位哥哥姐姐帮帮忙忙吧

就是这个部分,一运行到这里系统就奔溃了
//初始化书籍链表
book_info* Init_Book(book Lb)
{
int i=0;
Lb = (book_info*)malloc(sizeof(book_info));
book f = (book_info*)malloc(sizeof(book_info));
book b = (book_info*)malloc(sizeof(book_info));
if( Lb == NULL || b == NULL || f == NULL){
printf("error!\n");
return NULL;
}
FILE *fp;
fp=fopen("library","r");
if(fp==NULL)
{
printf("error!");

}
rewind(fp);
while(!feof(fp))
{
    if(i=0)
    {
        b->next = NULL;
        Lb->next = b;
        f = b;
        fscanf(fp,"%s %s %s %s %s %f %d %d",&b->book_num,&b->book_name,&b->book_author,&b->book_field,&b->book_publisher,&b->book_price,&b->book_index,&b->book_index2);        
    }
    i++;
    b = (book_info*)malloc(sizeof(book_info));
    if(b == NULL)
    {
    printf("error!\n");
    return NULL;
    }
    b->next = NULL;
    f->next = b;
    f = b;       
    fscanf(fp,"%s %s %s %s %s %f %d %d",&b->book_num,&b->book_name,&b->book_author,&b->book_field,&b->book_publisher,&b->book_price,&b->book_index,&b->book_index2);    
}
fclose(fp);

return Lb;

}

这是一开始用来保存的han'shu
void save_book( book Lb )
{

book b=Lb;
FILE *fp;
fp=fopen("library","wb");
if(fp==NULL)
{
    printf("error!");

}

while(b->next!=NULL)
{
    b=b->next;
    fprintf(fp,"%s %s %s %s %s %f %d %d",b->book_num,b->book_name,b->book_author,b->book_field,b->book_publisher,b->book_price,b->book_index,b->book_index2);

    printf("HH");
}

fclose(fp);

}

出什么错了,是导入结果不对还是程序崩溃?

把结构体声明也贴出来看看。

有可能是写入的字符串本身含有空格,导致读取的时候对应关系错乱了。