C语言修改指定内容后文本内容却被清除。求解答!

C语言编程,为什么修改文本内容会把txt所有内容清空了!!求解答!!

#include
#include
#include
typedef struct
{
    int num;
    char name[30];
    char sort[30];
    char press[30];
    char author[30];
    char date[30];
    char place[30];
    int amount;
    char sign[30];
}BOOKS;
void modify(BOOKS stu[],int n);
int main()
{
    BOOKS stu[500];
    int n;
    n= read(stu);
     modify(stu,n);
    return 0;
}
void modify(BOOKS stu[],int n)
{
FILE *fp,*ft;
char ch[500];
char a[500];
char key[500];
int i=0;
fp=fopen("D:\\学校\\图书信息.txt","r");
ft=fopen("D:\\学校\\图书馆理.txt","w");
if(fp==NULL||ft==NULL)
{
    printf("文件未打开\n");
    exit(1);
}
printf("请输入你想要修改的内容\n");
scanf("%s",ch);
printf("请输入修改后的内容\n");
scanf("%s",a);
while(fread(key,sizeof(key),1,fp))
{
    if(strcmp(key,ch)!=0)
    {
        fwrite(key,sizeof(key),1,ft);
        i++;
    }
    else
    {
       strcpy(key,a);
        fwrite(key,sizeof(key),1,ft);
    }
}
fclose(fp);
fclose(ft);
remove("D:\\学校\\图书信息.txt");
rename("D:\\学校\\图书馆理.txt","D:\\学校\\图书信息.txt");
printf("信息修改成功");
}

所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。▼ http://bbs.csdn.net/topics/391975224