这个哪里错了,运行后打开文件是乱码

void writeFile(int tag) {
FILE* fp;
Book* bookp;
bookp = bookHead;

if (tag == 1) {
    fp = fopen("book.txt", "w");//打开书籍文件
    while (bookp != NULL) {
        fwrite(bookp, sizeof(Book), 1, fp);//写入书籍信息
        bookp = bookp->next;
    }
}
fclose(fp);//关闭文件

}

//读取文件
void readFile(int tag) {
Book* bookp;
FILE* fp;

bookp = bookHead;

if (tag == 1) {
    fp = fopen("book.txt", "a+");
    while (fread(bookp, sizeof(Book), 1, fp)) {
        if (bookp->next != NULL) {
            bookp = (Book*)malloc(sizeof(Book));

            bookEnd->next = bookp;
            bookEnd = bookp;
            bookEnd->next = NULL;
        }
    }
}

}

a+是追加写
r才是读文件

读文件的时候指定一下编码,utf-8或者GBK。a+是追加写
r才读文件