Следующее было записано мной с манжетой и не было проверено, поэтому может потребоваться настройка. Также обратите внимание; ради времени я не тестировал возвращаемое значение fwrite
и fread
или проверял наличие ошибок чтения. ВЫ ДОЛЖНЫ СДЕЛАТЬ ЭТО.
Запись файла
int length = lengthOfList(bar); // Assuming you've already created bar as a linked list of Cars
Car foo[length];
putLinkedListIntoArray(&bar, foo);
FILE* fh = NULL;
if((fh = fopen("filename", "wb")) == NULL) {
// Error and die
}
fwrite(&length, sizeof(int), 1, fh);
fwrite(bar, sizeof(Car), length, fh);
fclose(fh);
Чтение файла
FILE* fh = NULL;
if((fh = fopen("filename", "rb")) == NULL) {
// Error and die
}
int length;
fread(&length, sizeof(int), 1, fh);
Car foo[length];
fread(foo, sizeof(Car), length, fh);
fclose(fh);
relinkCarList(foo, length);
Функции
int lengthOfList(Car* start) {
int length;
for(length = 0; start->next != NULL; length++) {
start = start->next;
}
return length;
}
void putLinkedListIntoArray(Car* start, Car* array) {
for(int i = 0; start->next != NULL; i++) {
array[i] = *start;
start = start->next;
}
}
void relinkCarList(Car* array, int length) {
for(int i = 0; i < length; i++) {
if(i < length - 1) {
array[i].next = array[i + 1].next;
}
}
}
Читайте о [сериализации] (https://en.wikipedia.org/wiki/Serialization) –
Там нет простого способа до вы пишете функцию, которая это делает. Тогда есть. –
Просто помните, что значение ссылки 'struct Car * next;', записанное в файл, будет устаревшим при перезагрузке данных из файла. Вы будете использовать входные данные для создания нового списка, по элементам, ссылку по ссылке. –