Сохранение структуры. Можно ли структуру записать целиком в файл? - 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 в файл и затем считать её обратно в память.