Fwrite () массив структур для файла в c - PullRequest
0 голосов
/ 16 апреля 2019

fwrite () не соответствует вводу из массива структур.

Tried: двоичные файлы, печать полей элементов структуры до fwrite.

FILE *currentPartition;

    struct FAT {
    char *filename;
    int file_length;
    int blockPtrs[10];
    int current_location;       
    } fat[20];`

    for (int i=0;i<20;i++)
     {
      printf("Appending fat index: %d\n",i);
      printf("filename: %s\n",fat[i].filename);
      printf("file length: %d\n",fat[i].file_length);

      printf("current location: %d\n",fat[i].current_location);

      fwrite(fat,sizeof(struct FAT),1,currentPartition);}

Когда я позже прочитал, этот код не возвращает то, что я изначально написал в файл.

1 Ответ

0 голосов
/ 16 апреля 2019

Ваша структура содержит указатель на filename, который является адресом данных, выделенных во время или при записи. Вы не написали строку, которая представляет имя, просто указатель на него.

Когда вы читаете его, ваша программа будет читать тот же указатель, но куда он указывает? Возможно, нет строки или она находится по совершенно другому адресу. Итак, вам нужно убедиться, что строка написана. Самый простой способ - использовать char filename[LEN]; в качестве поля структуры, где LEN - достаточно большое число. В противном случае вам нужно написать строку отдельно, а затем восстановить ее как отдельную сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...