Bonjour,

Je cherche comment enregistrer une structure dans un fichier, de sorte que je puisse la reloader plus tard.

Prenons un exemple simple: j'ai une équipe de Pokémons:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//contient toutes les infos sur l'équipe
struct Team
{
    //les infos des pokes
    struct Pokes
    {
        Pokes();
        void reset();
        unsigned int num:9;
        Uint16 moves[4];
        char nick[12+1];
        unsigned int item:9;
        unsigned int level:7;
        Uint8 hp_ev;
        Uint8 att_ev;
        Uint8 def_ev;
        Uint8 satt_ev;
        Uint8 sdef_ev;
        Uint8 speed_ev;
        unsigned int nature : 5;
        unsigned int hp_dv : 5;
        unsigned int att_dv : 5;
        unsigned int def_dv : 5;
        unsigned int satt_dv : 5;
        unsigned int sdef_dv : 5;
        unsigned int speed_dv : 5;
        unsigned int gender : 1;
        unsigned int shiney : 1;
        unsigned int ability: 1;
    };
 
    Pokes pokes[6];
    //celles du trainer
    char Trainer_Name[15+1];
    char Trainer_Info[200+1];
    char Trainer_Win[246+1];
    char Trainer_Lose[246+1];
 
    Team();
};
 
//gestionnaire de l'équipe
class TeamBuilder
{
    private:
       Team equipe;
       ...
    public:
       ...
};
Puis je déclare mes fonctions save_team et load_team comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
void TeamBuilder::save_team()
{
    ofstream out("team/team.pcb", ios::binary);
 
    out.write((char *)(void*)(&equipe), sizeof(Team));
}
 
void TeamBuilder::load_team()
{
    ifstream in("team/team.pcb", ios::binary);
 
    in.get((char *)(void*)(&equipe), sizeof(Team));
 
    ...
}
Le pire, c'est que ça marche

Enfin, jusqu'à présent ça marche, mais je voulais savoir s'il y avait des risques de corruption de mémoire, de segfault...
Parce que ça me paraît louche comme codage

Ou alors s'il y a une manière tout aussi simple de charger/sauver une structure?


Merci beaucoup!