gpt4 book ai didi

c - 如何删除二进制文件中的元素?

转载 作者:行者123 更新时间:2023-11-30 15:39:58 25 4
gpt4 key购买 nike

我认为我应该将所有文件读入程序,然后删除文件并以相同的名称再次打开,之后我应该使用 for 和 if(!strcmp(.,.)) 的示例函数我应该fwrite结构中的每个元素。我已经尝试过各种方法,但没有成功。有人可以帮我吗?我将非常感激。

void usun_element()
{
int i;
char nazwa[100];
FILE *fp;
if((fp=fopen("katalog.bin", "rb" ))==NULL)
{
printf("Brak pliku katalog na dysku.\n");
return;
}
else
printf("Wpisz nazwe, ltora chcesz usunac z listy: ");
scanf("%s", &nazwa);
otworz();
remove("katalog.bin");
otworz();
i=0;
while(i<ost)
{

if(!strcmp(nazwa,kat[i].nazwa))
{
fwrite(&kat[i].nazwa, sizeof(kat), 1, fp);
fwrite(&kat[i].typ, sizeof(kat), 1, fp);
fwrite(&kat[i].rodzaj, sizeof(kat), 1, fp);
fwrite(&kat[i].posiadane, sizeof(kat), 1, fp);
}
else
{
ost=i-1;
}
i++;


}
}

最佳答案

将格式说明符与参数相匹配。
使用正确的 sizeof()。
ost=i-1; 表示怀疑。也许不需要。

static const char *EnterNameToDelete = "Wpisz nazwe, ltora chcesz usunac z listy: ";
fputs(EnterNameToDelete, stdout);
// scanf("%s", &nazwa);
scanf("%99s", nazwa); // drop the &

if(!strcmp(nazwa, kat[i].nazwa)) {
// use the correct sizeof()
if (fwrite(&kat[i].nazwa , sizeof(kat[i].nazwa) , 1, fp) == 0 ||
fwrite(&kat[i].typ , sizeof(kat[i].typ) , 1, fp) == 0 ||
fwrite(&kat[i].rodzaj , sizeof(kat[i].rodzaj) , 1, fp) == 0 ||
fwrite(&kat[i].posiadane, sizeof(kat[i].posiadane), 1, fp)) {
Handle_IO_Error();
}
}

如果 OP 发布 kat 声明和结构将会有所帮助。

关于c - 如何删除二进制文件中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com