Problème de lecture d'un fichier en C

Fermé
slipy15 - 26 oct. 2010 à 19:43
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011 - 27 oct. 2010 à 13:09
Bonjour à tous,

J'ai un problème avec un fichier

J'enregistre dans ce fichier des structures

typedef struct
{
int OffSet;
short Longueur;
char Donnee[255];
} ELEMENT;

Ensuite je dois afficher le contenu du fichier en lisant 2 enregistrements à la fois. Mais lorsque j'essaye d'afficher, soit j'ai la même ligne qui s'affiche en boucle, soit j'ai un message d'erreur: "Segmentation Fault (core dumped)"

D'après ce que j'ai compris, ce serait un problème de pointeur mais je n'arrive pas à le résoudre.

Je tiens à préciser que je suis sur une machine virtuelle solaris, ce qui normalement ne change rien.

Voici ma fonction d'affichage:

int Liste(FICHIER F)
{
printf("Liste du fichier : %s\n------------------\n",F.NomFichier);

int fin = 0; // Variable qui me permet de voir si je suis en fin de fichier
int ret = 1; // Variable qui récupère la valeur de retour de fread

FILE* fp; // mon pointeur de fichier
ELEMENT Elm; // ma structure

rewind(fp); // je replace le pointeur au début du fichier

do
{

fin = feof (fp); // je vérifie que je ne suis pas à la fin de mon fichier
if(fin != 0)
{
return 1; // Si je suis à la fin, je quitte la fonction d'affichage
}
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n"); // J'affiche
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n");
fin = feof (fp); // Je revérifie si je suis à la fin du fichier
}while(fin == 0); // Si je ne suis pas à la fin, je boucle pour afficher les enregistrements suivant

return 0;
}

Merci pour vos réponses.
A voir également:

2 réponses

ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
26 oct. 2010 à 22:30
bonjour,

je pense qu'il manque le fopen, mais c'est surement une erreur de retranscription.
par contre vous essayez de lire 2 éléments en ayant seulement alloué de la place pour un seul
ELEMENT Elm; // ma structure 1 seul element ELEMENT
.....
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
et là lecture de 2 ELEMENT dans Elm
d'où le probléme

cdlt
0
Merci, je vais essayer de modifier ça immédiatement. En effet je n'ai pas mis le fopen car il se trouve dans le main et je n'ai pas besoin de refaire une deuxième ouverture.
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
26 oct. 2010 à 23:42
quid du pointeur sur l'objet flux de type opaque !!
en français,
le FILE *fp n'est pas affecté dans la fonction recopiée. est-ce un oubli d'un morceau de code ?
0
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011
Modifié par sdfsam le 27/10/2010 à 13:15
Comment puisse je faire le traitement des données d'un fichier en langage C?
Mes données sont dans un fichier txt et qui représentent un Arbre de défaillances de la manier suivant avec des portes logiques (OU par g*1,ET par g+0) et leurs entrées qui seront soient :d'autres portes ou des événements simple ou leurs complément (e+1 ou e-1) c'est des appellations

Exemple :

g+0 e+1 e+2 e+3 g*1 g*2
g*1 g+4 g*5
g*2 g+6 g+7
g*3 g+8 g*9
g+4 e+16 e+18 g+10
g*5 e+4 e+5
e+6 e+10 e+12 e+14
g+7 e+7 e+8 e+9 e+11 e+13 e+15
g+8 e+17 e+19 g+13
g*9 e+4 e+5
g+10 e+4 e+5 e+6 e+10 e+12 e+14
g*11 e-4 e-5 e-6


mon but est de faire la lecture de ces données puis passer à leur traitement.et d'extraire nos besoins
0