Lecture fichier en C

Résolu/Fermé
frizou - 11 oct. 2005 à 16:38
 Armand - 27 janv. 2007 à 17:19
bonjour a tous
voila g un petit bout de code qui a pour but de lire la premiere ligne d'un fichier entré en parametre a l'execution (donc contenu dans argv[1])
mais voila il le lit bien mais ensuite mon execution m'annonce une "erreur segmentation" arg...
d'ou vient l'erreur?

voila le code:
int main(int argc, char **argv)
{
FILE *fichier;
char *temp;
fichier = fopen(argv[1], "r");
fscanf(fichier, "%s", temp);
printf("voila ce qu'il y a dans temp: ***%s***\n", temp);
fclose(fichier);
return EXIT_SUCCESS;
}

merci!

4 réponses

kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 523
11 oct. 2005 à 17:02
fsanf() va mettre le contenu de ton fichier à l'adresse de temp.
Mais tu n'as alloué aucun espace pour temp, ce n'est qu'un pointeur.

Soit tu déclare un temp assez gros pour prendre le contenu du fichier (char temp[32] si ton fichier fait 32 octets), soit tu fais une allocation memoire de la taille du fichier pour temp:
#include <stdlib.h>
int main(int argc, char **argv) 
{ 
     FILE *fichier; 
     char *temp; 
     long taille_file;

     fichier = fopen(argv[1], "r"); 
     //On fait pointer fichier vers la fin du fichier 
     fseek(fichier,SEEK_END,0);
     /*On met la taille du fichier dans taille_fichier (car fichier pointe
         vers la fin du fichier, sa position donne le nombre d'octets 
         pour arriver à la fin) */
     taille_fichier=ftell(fichier);
     //On refait pointer fichier au début du fichier
     fseek(fichier,SEEK_SET,0);
     //Allocation de temp avec la taille du fichier
     temp=(char *)malloc(sizeof(char) * taille_fichier);

     fscanf(fichier, "%s", temp); 
     printf("voila ce qu'il y a dans temp: ***%s***\n", temp); 
     fclose(fichier); 
     //On libère temp
     free(temp);
     return EXIT_SUCCESS; 
} 
6
Salut Kilian, il vaut mieux faire :

fseek(fic,0,SEEK_END);

que

fseek(fic,SEEK_END,0);

salut
0
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
108
11 oct. 2005 à 17:03
Tu n'as pas alloué de mémoire pour ta variable temp. A moins que fscanf l'alloue tout seul, mais pas sur...

EDIT : mince, trop tard, et moins bien ;-)

Bien joué killian !
0
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 329
11 oct. 2005 à 17:04
erreur de fscanf et de temp.
il me semble qu'avec scanf il faut initialiser la taille du tableau.
autre chose, tu devrais tester que ton fichier est bien ouvert .
if ((fichier=fopen(...))==0) printf("erreur d'ouvertur");
et dans un cas comme ça, utilise un debuggeur, il te dira ou est l'erreur.
0
Merci beaucoup Killian pour ce coup de main, ca marche niquel!

merci aux autres!
0