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

  1. Типизация данных: В первой строке объявляется структура myStruct, которая состоит из трех элементов: символа типа char, целого числа типа int и вещественного числа типа double.
  2. Ввод данных: В блоке main() создается экземпляр структуры myStruct с именем st1. Затем пользователю предлагается ввести значения для каждого из элементов структуры.
  3. Запись в файл: После ввода данных создается файл myfile.bin и в него записывается структура st1 с помощью функции fwrite().
  4. Чтение из файла: Затем создается новый экземпляр структуры myStruct с именем st2 и считывается из файла myfile.bin с помощью функции fread().
  5. Вывод данных: После чтения данных из файла выводятся значения элементов структуры st2 с помощью функции printf().
  6. Управление памятью: После работы с файлом он закрывается с помощью функции fclose(). Также освобождается память, выделенная под структуру st2, с помощью функции free().
  7. Обработка ошибок: В коде предусмотрена обработка ошибок при открытии файлов: если файл не удается открыть, программа возвращает 0. Таким образом, данный код позволяет сохранить структуру данных типа myStruct в файл и затем считать её обратно в память.

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы