Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何删除二进制文件中的元素?_C_File_Binary_Structure_Element - Fatal编程技术网

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

C 如何删除二进制文件中的元素?,c,file,binary,structure,element,C,File,Binary,Structure,Element,我认为我应该将所有文件读入程序,然后删除文件并用相同的名称再次打开,然后我应该使用例如函数for和if(!strcmp(,)我应该写入结构中的每个元素。我每种方法都试过,但都不管用。有人能帮我吗?我将非常感激 void usun_element() { int i; char nazwa[100]; FILE *fp; if((fp=fopen("katalog.bin", "rb" ))==NULL) { printf("Brak pli

我认为我应该将所有文件读入程序,然后删除文件并用相同的名称再次打开,然后我应该使用例如函数for和
if(!strcmp(,)
我应该
写入结构中的每个元素。我每种方法都试过,但都不管用。有人能帮我吗?我将非常感激

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++;


}
}
void usun\u元素()
{
int i;
查尔纳兹瓦[100];
文件*fp;
如果((fp=fopen(“katalog.bin”,“rb”))==NULL)
{
printf(“Brak pliku katalog na dysku.\n”);
返回;
}
其他的
printf(“Wpisz nazwe,ltora chcesz usunac z listy:”);
scanf(“%s”&nazwa);
otworz();
移除(“katalog.bin”);
otworz();
i=0;

while(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发布了声明和结构,这会很有帮助。

不要害羞,给我们看看你的代码。没有其他方法可以理解你到底想要什么。达博是对的:)我用了一些不是英语的单词,我想你理解起来会有点麻烦;)
fwrite(&kat[I],sizeof(*kat),1,fp);
如果是固定长度字符串。