Сохранение структуры. Можно ли структуру записать целиком в файл? - C (СИ)
Формулировка задачи:
давно интересует такой вопрос: можно ли сразу записать структуру целиком в файл? т.е. fwrite(struct, sizeof(struct), 1, fp)? или если нет еще вопрос можно ли как то обратиться к членам структуры не по именам? ну как то я не знаю по id какому нибудь или что то в этом роде... просто для многих программ часто требуется сохранение структур в бинарник... фактически алгоритм один и тот же везде, вот я и подумал может можно написать какие то общие функции например с использованием шаблонов... только не знаю как обратиться к членам структуры не по имени...
Решение задачи: «Сохранение структуры. Можно ли структуру записать целиком в файл?»
textual
Листинг программы
typedef struct{ char ch; int i; double r; } myStruct; int main(int argc, char *argv[]) { setlocale(LC_ALL, "RU"); myStruct st1; printf("Введите символ\n"); fflush(stdin); scanf("%c", &st1.ch); printf("Введите целое число\n"); scanf("%d", &st1.i); printf("Введите вещественное число\n"); scanf("%lf", &st1.r); FILE *outfile = NULL; if((outfile = fopen("myfile.bin", "wb")) == NULL) return 0; fwrite(&st1, sizeof(st1), 1, outfile); fclose(outfile); myStruct *st2 = (myStruct *)malloc(sizeof(myStruct)); FILE *infile = NULL; if((infile = fopen("myfile.bin", "rb")) == NULL) return 0; fread(st2, sizeof(st1), 1, infile); fclose(infile); printf("Введённые данные: %c, %d, %lf\n", *((char *)st2), st2->i, st2->r); free(st2); return 0; }
Объяснение кода листинга программы
В данном коде представлена программа на языке C, которая сохраняет структуру данных типа myStruct в файл myfile.bin
и затем считывает её обратно в память.
- Типизация данных: В первой строке объявляется структура myStruct, которая состоит из трех элементов: символа типа char, целого числа типа int и вещественного числа типа double.
- Ввод данных: В блоке main() создается экземпляр структуры myStruct с именем st1. Затем пользователю предлагается ввести значения для каждого из элементов структуры.
- Запись в файл:
После ввода данных создается файл
myfile.bin
и в него записывается структура st1 с помощью функции fwrite(). - Чтение из файла:
Затем создается новый экземпляр структуры myStruct с именем st2 и считывается из файла
myfile.bin
с помощью функции fread(). - Вывод данных: После чтения данных из файла выводятся значения элементов структуры st2 с помощью функции printf().
- Управление памятью: После работы с файлом он закрывается с помощью функции fclose(). Также освобождается память, выделенная под структуру st2, с помощью функции free().
- Обработка ошибок: В коде предусмотрена обработка ошибок при открытии файлов: если файл не удается открыть, программа возвращает 0. Таким образом, данный код позволяет сохранить структуру данных типа myStruct в файл и затем считать её обратно в память.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д