Conversion d'une structure en char*
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:
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:
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 :aie:
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 :mrgreen:
Ou alors s'il y a une manière tout aussi simple de charger/sauver une structure?
Merci beaucoup!