1 Востаннє редагувалося Kane (14.11.2014 16:10:35)

Тема: [pure C] Запис структури з вказівниками до файлу

Доброго дня!

Придумав собі наступну проблему.

struct CONFIG {
    char *name;
    int val;
    char *password;
    // char *c_test;
    // int *i_test;
    // double *d_test;
    // ... і ще 100 вказівників
};

Наприклад маємо структуру, а в ній ~100 і більше полей, типу вказівника (по адресах знаходяться дані, які і потрібно записати/зчитати у файл). Ну, і якось не варіант 100 раз робити fread/fwrite, глупо це..

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MLC 20

struct CONFIG {
    char *name;
    int val;
    char *password;
    // char *c_test;
    // int *i_test;
    // double *d_test;
    // ... і ще 100 вказівників
};


struct CONFIG *getCongif() {
    struct CONFIG *sp = malloc(sizeof(struct CONFIG));

    sp->name = strcpy(memset(malloc(MLC), 0, MLC), "root");
    sp->val = 1488;
    sp->password = strcpy(memset(malloc(MLC), 0, MLC), "qwerty");

    return sp;
}


int main() {
//  ------------------------------------------------------------------

    struct CONFIG *s = getCongif();

    FILE *fw, *fr;

    fw = fopen("\\Release\\cfg.bin", "wb");

    fwrite(s->name, MLC, 1, fw);
    fwrite(&s->val, sizeof(int), 1, fw);
    fwrite(s->password, MLC, 1, fw);

    fclose(fw);

    free(s->name);
    free(s->password);

//  ------------------------------------------------------------------

    struct CONFIG *o = malloc(sizeof(struct CONFIG));

    o->name = malloc(MLC);
    o->password = malloc(MLC);

    fr = fopen("\\Release\\cfg.bin", "rb");

    fread(o->name, MLC, 1, fr);
    fread(&o->val, sizeof(int), 1, fr);
    fread(o->password, MLC, 1, fr);

    printf("%s - %d - %s\n", o->name, o->val, o->password);

    fclose(fr);

    free(o->name);
    free(o->password);

//  ------------------------------------------------------------------

    return 0;
}

Як елегантно можна вирішити це питання (аби одним махом обробити всю структуру)?

2

Re: [pure C] Запис структури з вказівниками до файлу

Здається, овчинка вироблення не коштує. Гадаю, на практиці, структури з такою кількістю полей типу вказівника, які потрібно записати/зчитати, не використовуються :)

Закрийте будь-ласка тему.

Подякували: quez1