C语言从txt里面删除某一段文字(代码有问题删除不了某一段文字)

#include<stdio.h>
#include<string.h>

void delete_tea();

int main(void){
	delete_tea();
	return 0;
}

void delete_tea(){                                                 // 删除教师信息(直接在文件内部操作) 
    FILE *fp,*ft;
    char set[3]; 
	char key[3];
    int index=0;
    printf("请输入要删除的教师用户名:");
    scanf("%s",set);
   
    fp=fopen("t_key.txt","rt+");
    ft=fopen("temp.txt","wt");
    if(fp==NULL || ft==NULL){
        printf("错误!\n");
        return;
    }
    while(fread(key,sizeof(key),1,fp)){
        if(strcmp(key,set)!=0){
           fwrite(key,sizeof(key),1,ft);
           index++;
        }
        else{
            rewind(fp);
            fseek(fp,sizeof(key)*(index+2),0);
        }
    }
        fclose(fp);
        fclose(ft);
        remove("t_key.txt");
        rename("temp.txt","t_key.txt");
        printf("教师信息删除成功!\n");

}

fread(key,sizeof(key),1,fp)每次读取3个字节,不包括'\0',但是strcmp(key,set)比较的时候,用'\0'作为字符串的结束符,所以每次你读取的数据进行比较的时候可能会出问题。所以key和set都需要用\0结束,申请空间的时候申请4个字节,用来存放\0,但是从文件中读取的时候,只读取3个字节。从键盘给set赋值的时候,也只能读取3个字节,第四个字节(set[3])必须设为0