C语言一个子函数,目的是删除文件中制定的一行,但是老是出错,下面是函数

2025-04-01 17:54:35
推荐回答(2个)
回答1:

帮你优化了一下,你试试,希望对你有帮助
void deletes(FILE **fp,char *fnames) //如果想带回fp,fp需要传地址
{
FILE *fq;
char names[SIZE];
char temp[SIZE];
printf("请输入要删除的姓名:");
gets(names);
fq=fopen("a.txt","w");
while( !feof( *fp) )
{
if ( fgets(temp,100,fp) == NULL ) //每次读一行,到文件尾结束循环
break ;
if(strstr(temp,names)==NULL) //如果该行中没有names就保存到新文件
fputs(temp,fq);
}
fclose(*fp);
fclose(fq);
remove(fnames);
rename("a.txt",fnames);
*fp=fopen(fnames,"a+");
}
调用时注意fp要加&取地址符!!

回答2:

我不知道你问的是什么意思。
但是经过我测试之后注释掉这两个
//clean();
// rewind(fp);
并且在
char temp[SIZE][SIZE];
下面加入
memset(temp,0,sizeof(temp));
程序就能正常运行了。
这个错误是因为temp里面没有进行初始化,之后如果读入的文件大小比最大值要小,那么剩余的空间将全是乱码,所以更改之后的文件出现乱码。