lecture fichier

lecture fichier - C - Programmation

Marsh Posté le 23-01-2006 à 15:19:29    

voila mon bout de code qui pose soucis :
 

Citation :

FILE *f;
 int lettreattendue;
 char *nomfichier;
 f=fopen("apprentissage.txt","r" );
  printf("yo \n" );
 /*while (fscanf(f,"%s %d",nomfichier,&lettreattendue)!=EOF);
 {
  printf("%s %d \n", nomfichier, lettreattendue);
  fscanf(f,"\n" );
 }*/
 fscanf(f,"%s ",nomfichier);
 fscanf(f,"%d",&lettreattendue);
 printf("%s %d \n", nomfichier, lettreattendue);
 fscanf(f,"\n" );
 fscanf(f,"%s ",nomfichier);
 fscanf(f,"%d",&lettreattendue);
 printf("%s %d \n", nomfichier, lettreattendue);
 fscanf(f,"\n" );
 fscanf(f,"%s ",nomfichier);
 fscanf(f,"%d",&lettreattendue);
 printf("%s %d \n", nomfichier, lettreattendue);
 //fscanf(f,"\n" );
 fclose(f);


 
avec en fichier apprentissage.txt :

Citation :


config1txt 1
config2txt 2
config3txt 3
 


 
j'ai un segmentation fault sur le fclose (en mettant l avant derniere ligne ou pas, ici elle n'y est pas puisque en commentaire) les 3 lignes étant bien lu...
deuxieme probleme sans le printf yo (ou printf autre connerie...) j'ai segmentation fault des le depart
autre probleme quand j essaie de faire une boucle (pour pouvoir lire un nombre indeterminé de lignes) avec while (scanf(f...) != EOL) ca me mets segmentation fault direct...
 
Pourquoi? :??:  

Reply

Marsh Posté le 23-01-2006 à 15:19:29   

Reply

Marsh Posté le 23-01-2006 à 15:29:37    

ton char* nomfichier est faux. Faut donner une taille à ton tableau, assez grande pour récupérer les lignes de ton fichier.

Reply

Marsh Posté le 23-01-2006 à 15:44:50    

merci ca marche mais j ai pas saisi pkoi  :??:  mes erreurs avaient apriori rien à voir mes printf me sortaient correctement les chaines de caracteres config1txt config2txt config3txt...


Message édité par Profil supprimé le 23-01-2006 à 15:47:08
Reply

Marsh Posté le 23-01-2006 à 15:49:37    

Lorsque tu fais un fscanf(f,"%s ",nomfichier); tu demandes à la fonction fscanf de lire une chaine de caractères dans le fichier et de la ranger à l'adresse indiquée par nomfichier. Nonfichier étant un pointeur non initialisé à une adresse valide, tu écris dans la nature,.
Parfois la nature fais bien les choses, et ça marche un peu, c'est-à-dire que fscanf a écrit dans une zone valide de la mémoire mais à bousiller des données qui y étaient rangées d'où les plantes observées quelques instructions plus tard.


Message édité par Trap D le 23-01-2006 à 15:50:56
Reply

Marsh Posté le 23-01-2006 à 15:51:07    

par contre ca marche en lisant une ligne par une ligne
mais en utilisant la boucle while (en commentaire dans mon bout de code) ca lit que la derniere ligne du fichier :-(

Reply

Marsh Posté le 23-01-2006 à 15:55:54    

Tant que tu n'auras pas alloué de la mémoire à nomfichier avec malloc pour ranger les chaînes de caractères, tu auras "l'impression" que ça marche, mais en fait ton code SERA FAUX !!!

Reply

Marsh Posté le 23-01-2006 à 16:04:00    

oui c'est bon j ai mis char nomfichier[50] à la place comme l'as dis Godbout !
ca marche niquel en lisant les trois ligne une par une.
maintenant le pbm est autre ma boucle while ne lis que la derniere ligne du fichier...

Reply

Marsh Posté le 23-01-2006 à 16:06:30    

Tu peux reposter le code que tu utilises actuellement ?

Reply

Marsh Posté le 23-01-2006 à 16:07:07    

Pas la peine, il y a un ',' à la fin du while !

Reply

Marsh Posté le 23-01-2006 à 16:10:27    

putain j'suis une brele  :cry:  
dsl de t'avoir derangé pour ca, merci bcp

Reply

Marsh Posté le 23-01-2006 à 16:10:27   

Reply

Marsh Posté le 23-01-2006 à 17:39:13    

C'est en forgeant qu'on devient boulanger [:super chinois]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed