Problème avec fscanf

Problème avec fscanf - C - Programmation

Marsh Posté le 04-06-2006 à 15:10:34    

Bonjour, j'ai un petit problème de segmentation fault lorsque j'utilise fscanf et je ne comprends pas pourquoi. Voici tout d'abord la partie du code posant problème :
 

Code :
  1. FILE *fic=fopen(file,"r" );
  2. char ss[500];
  3. printf("Debut du chargement\n" );
  4. fscanf(fic,"%s",ss);
  5. printf("Fin de lecture\n" );
  6. printf("%s\n",ss);


 
Le segmentation fault se produit sur le fscanf (il y a juste "Debut du chargement" d'affiché).
Si, au lieu d'utiliser fscanf, j'utilise scanf et que je lance mon programme en redirigeant la sortie du fichier sur l'entrée standart de mon programme (prog < "nom du fichier" ) cela fonctionne sans problème. Pourquoi cela ne fonctionne pas en utilisant fscanf ?
 
Merci pour vos futures réponses

Reply

Marsh Posté le 04-06-2006 à 15:10:34   

Reply

Marsh Posté le 04-06-2006 à 15:15:31    

Reply

Marsh Posté le 04-06-2006 à 15:28:51    

mifinoufou a écrit :

Bonjour, j'ai un petit problème de segmentation fault lorsque j'utilise fscanf et je ne comprends pas pourquoi. Voici tout d'abord la partie du code posant problème :


Tu ne vérifies pas si file s'est ouvert correctement. Tout peut arriver...
 
Ceci fonctionne chez moi. Evidemment fscanf() utilisé comme ça ne prend qu'un mot à la fois...

Code :
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.    char const *file = "corbeau.txt";
  5.    FILE *fic = fopen(file, "r" );
  6.    if (fic != NULL)
  7.    {
  8.       char ss[500];
  9.       printf("Debut du chargement\n" );
  10.       fscanf(fic, "%s", ss);
  11.       printf("Fin de lecture\n" );
  12.       printf("%s\n", ss);
  13.    }
  14.    else
  15.    {
  16.       perror (file);
  17.    }
  18.    return 0;
  19. }


Pour lire tous les mots un par un, il suffit de boucler :  

Code :
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.    char const *file = "corbeau.txt";
  5.    FILE *fic = fopen(file, "r" );
  6.    if (fic != NULL)
  7.    {
  8.       char ss[500];
  9.       printf("Debut du chargement\n" );
  10.       while (fscanf(fic, "%499s", ss) == 1)
  11.       {
  12.          printf("%s\n", ss);
  13.       }
  14.       printf("Fin de lecture\n" );
  15.    }
  16.    else
  17.    {
  18.       perror (file);
  19.    }
  20.    return 0;
  21. }


Message édité par Emmanuel Delahaye le 04-06-2006 à 15:30:00

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 04-06-2006 à 15:30:28    

Je viens de lire le sujet ci dessus mais cela ne me dit pas comment résoudre mon problème seg fault.
C'est bien la fonction fscanf que j'ai besoin, fgets ne suffit pas pour mon problème (par la suite je veux utiliser des choses du genre fscanf(fic,"debut %x",n) afin de vérifier que ce qu'il y a dans le fichier correspond bien à ce qu'il doit y avoir).
 
Je pourrais modifier stdin afin qu'il devienne mon descripteur de fichier mais je pense que fscanf devrait marcher sans cette bidouille...

Reply

Marsh Posté le 04-06-2006 à 15:31:42    

Nos messages se sont croisés... Je vais vérifier si le fichier est bien ouvert. Merci

Reply

Marsh Posté le 04-06-2006 à 15:37:06    

C'est bon, merci beaucoup :-). Encore un petite erreur qui m'aurat fait perdre pas mal de temps...

Reply

Sujets relatifs:

Leave a Replay

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