2015-08-14 3 views
-1

Я делаю программу, которая добавляет динамические данные в файл. Динамические данные представлены в виде связанного списка. Для примера рассмотрит следующие данные:Запись инкапсулированного динамического размера данных в текстовый файл в c

#include <stdio.h> 

    struct abc 
    { 
    int a; 
    struct abc *next; 
    }; 

    int main() 
    { 
    abc obj1; 
    abc obj2; 
    } 

Как я могу добавить эти объекты в файл? Я не могу написать адреса указателей. Я должен писать значения, но как я могу поместить разделитель, чтобы различать два объекта? Я не могу просто прочитать объекты с помощью read() функций.

Просьба предложить несколько полезных способов сделать это.

+3

Это не похоже на [tag: C] –

+0

Если это список, который содержит не более одного 'int', только записывайте эти' int 'в файл и перестраивайте список, когда вы читаете их из файл снова. –

+0

Я хочу хранить несколько списков int и как я могу различать два списка во время чтения. Я хочу сохранить данные инкапсуляции – user2992191

ответ

0

Вы можете использовать библиотеку fstream для чтения и записи данных в файлы. Вы можете добавить метод в свой класс, который может обрабатывать запись данных объекта в файл или создать другой класс, который будет обрабатывать чтение и запись списка объектов в файл и из него.

+0

, так как я не пишу объект напрямую, я пишу каждое значение, поэтому я могу различать два этих объекта при чтении – user2992191

+0

@ user2992191, так как это класс, который вы разрабатываете, вы можете сами принять решение разделитель. Например, вы можете использовать запятую для разделения значений тех же объектов и символа новой строки, чтобы различать разные объекты. –

0

Вам необходимо решить, какой протокол использовать.

Вы можете сделать это следующим образом:

void write_abc(FILE *f) { 
    // count the number of elements in the list. Write the number to the file. 

    // write the numbers. 
} 

struct abc read_abc(FILE *f) { 
    // Read a number from the file. This is the number of elements in the list. 

    // Read that number of elements and add to a new list. 

    // Return the new list 
} 
+0

да, это один из способов сделать это. – user2992191

+1

В C нет стандартного способа сделать это. Просто решите способ отформатировать свои данные. Вы также можете использовать протоколы/форматы, которые лучше подходят для обработки будущих изменений в структуре структуры, таких как JSON или XML. –

0

Проблема здесь состоит в том, что указатели будут иметь адреса, назначенные во время выполнения. Если вы читаете адреса указателей из файла, который был создан другим исполняемым файлом или одним и тем же исполняемым файлом во время другого выполнения, адреса будут не совпадать.

Что вам нужно сделать, так это просто сохранить целую часть каждого узла в файле в том порядке, в котором они отображаются в связанном списке. Просто продолжайте хранить их, пока не дойдете до конца списка.

Затем при чтении перестройте весь связанный список, прочитав значение файла по значению. Продолжайте читать, пока не дойдете до конца файла.

Смежные вопросы