Problème lecture structure dans fichier
glennog
Messages postés
293
Date d'inscription
Statut
Membre
Dernière intervention
-
glennog Messages postés 293 Date d'inscription Statut Membre Dernière intervention -
glennog Messages postés 293 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train d'apprendre à écrire et à lire des structures dans les fichiers , mais , j'ai quelques difficultés , au fait , j'arrive à lire et à écrire dans le fichier , mais cependant , lors de la lecture des différents champs qui composent ma structure , l'age du personnage , m'affiche une valeur "2293700" à tout mes essais ,
mais j'arrive à lire correctement les autres champs de ma structure , pourriez vous me dire , ou se trouve le problème , voici mon code source
je suis en train d'apprendre à écrire et à lire des structures dans les fichiers , mais , j'ai quelques difficultés , au fait , j'arrive à lire et à écrire dans le fichier , mais cependant , lors de la lecture des différents champs qui composent ma structure , l'age du personnage , m'affiche une valeur "2293700" à tout mes essais ,
mais j'arrive à lire correctement les autres champs de ma structure , pourriez vous me dire , ou se trouve le problème , voici mon code source
int main() { FILE *fiche = NULL; fiche = fopen("doc.dat", "r" ); // si le fichier n'existe pas alors , je le crée if (fiche ==NULL) { fiche = fopen("doc.dat","w"); } // dans mon fichier personnage.h définition de ma structure typedef struct personnage personnage; typedef struct personnage { char nom[15]; char prenom[20]; int age; }; personnage v1; printf("\n Veuillez saisir le nom du personnage \n"); scanf("%s",&v1.nom); printf("\n Veuillez saisir le prenom du personnage \n"); scanf("%s",&v1.prenom); printf("\n Veuillez saisir l'age du personnage \n"); scanf("%d",&v1.age); fwrite(&v1,sizeof(v1),1,fiche); fclose(fiche); printf("\n maintenant je mapprete a lire le fichier \n "); FILE *fic = fopen("doc.dat", "r" ); // je crée une nouvelle structure qui va contenir les informations de ma strucutre v1 personnage v2; fread(&v2,sizeof(v2),1,fic); printf("\n le nom du personnage dans le fichier est : %s ", v2.nom); printf("\n l'age du personnage dans le fichier est : %d \n",v2.age); printf("\n le prenom du personnage dans le fichier est : %s ", v2.prenom); fclose(fic); return 0; }
A voir également:
- L'importateur de fichiers a détecté une incohérence dans la structure de fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Bonjour,
Il ne faut pas écrire directement une struct dans un fichier à cause l'alignement en mémoire : https://fr.wikipedia.org/wiki/Alignement_en_m%C3%A9moire
Et aussi l'endianness je pense problème sur la portabilité.
Créez un format pour vos données comme les fichiers .ini par exemple
Il ne faut pas écrire directement une struct dans un fichier à cause l'alignement en mémoire : https://fr.wikipedia.org/wiki/Alignement_en_m%C3%A9moire
Et aussi l'endianness je pense problème sur la portabilité.
Créez un format pour vos données comme les fichiers .ini par exemple
ok
mais , alors , dis moi comment faire pour sauvegarder les elements de ma structure ?
merci d'avance
mais , alors , dis moi comment faire pour sauvegarder les elements de ma structure ?
merci d'avance
Salut glennog,
Comme tu as un besoin identifié et une structure assez simple, tu peux, par exemple, créer une struct de sauvegarde, dans laquelle les 3 éléments sont des chaînes C, une fonction qui convertit ta struct d'origine (qui sera ta struc de travail), en struct de sauvegarde (en convertissant l'entier en chaîne C, donc), et sauvegarder la structure composée de chaînes C, et faire l'opération inverse pour le chargement.
Sinon, il y a des bibliothèques qui gèrent cela. Ce type d'opérations s'appelle la "sérialisation" des données.
Dal
Comme tu as un besoin identifié et une structure assez simple, tu peux, par exemple, créer une struct de sauvegarde, dans laquelle les 3 éléments sont des chaînes C, une fonction qui convertit ta struct d'origine (qui sera ta struc de travail), en struct de sauvegarde (en convertissant l'entier en chaîne C, donc), et sauvegarder la structure composée de chaînes C, et faire l'opération inverse pour le chargement.
Sinon, il y a des bibliothèques qui gèrent cela. Ce type d'opérations s'appelle la "sérialisation" des données.
Dal
une struct de sauvegarde, dans laquelle les 3 éléments sont des chaînes C
utilise snprintf pour convertir de façon sécurisée sans dépasser la taille allouée à ta chaîne (et vérifier que la conversion s'est bien passée) de int à char *.
Pour l'opération inverse, convertir de char * à int avec strtol.
Dal
utilise snprintf pour convertir de façon sécurisée sans dépasser la taille allouée à ta chaîne (et vérifier que la conversion s'est bien passée) de int à char *.
Pour l'opération inverse, convertir de char * à int avec strtol.
Dal