IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème fgets()


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Par défaut Problème fgets()
    Voila j'ai un problème en utilisant la fonction fgets :

    J'ai une fonction définie dans un .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * lireFichierSource(FILE * pt_fichier);
    qui réalise ce traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * buffer; // enregistrement lu
         fgets(buffer,300,pt_fichier);
         return (buffer) ;
    Lorsque j'apelle cette fonction dans le main de cette manière le programme plante au niveau de l'apelle à la fonction fgets() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * buffer ;
         FILE * fichier = ouvrirFichierSource("c:\\test.txt"); //fonction définie par ailleurs et qui fonctionne
         buffer = lireFichierSource(fichier) ;
    Par contre si j'écrit le bout de code de la fonction lireFichierSource directement dans le main cela fonctionne sans problème. Quelqu'un aurait une idée ?

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Nulle part je ne vois traces d'allocations mémoires. Est-ce parce que tu n'en fais pas (auquel cas il est normal que ton programme plante), ou bien parce que tu ne les as pas recopiées ici ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut Re: Problème fgets()
    Citation Envoyé par Marseyeah
    qui réalise ce traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * buffer; // enregistrement lu
         fgets(buffer,300,pt_fichier);
         return (buffer) ;
    Peut-on avoir la source du code?

    Comment alloues-tu de la mémoire pour ton buffer?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Problème fgets()
    Citation Envoyé par Marseyeah
    J'ai une fonction définie dans un .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * lireFichierSource(FILE * pt_fichier);
    C'est le prototype de la fonction qui est défini. Ca a pour conséquence la declaration de la fonction. La définition de la fonction est faite ailleurs (enfin, j'espère).
    qui réalise ce traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * buffer; // enregistrement lu
         fgets(buffer,300,pt_fichier);
         return (buffer) ;
    Lorsque j'apelle cette fonction dans le main de cette manière le programme plante au niveau de l'apelle à la fonction fgets() :
    Ben oui, comportement indéfini...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * buffer ;
         FILE * fichier = ouvrirFichierSource("c:\\test.txt"); //fonction définie par ailleurs et qui fonctionne
         buffer = lireFichierSource(fichier) ;
    Dans la fonction lireFichierSource(), le pointeur buffer n'est pas initialisé. La valeur passée à fgets() est donc indéterminée et le comportement est indéfini. Il faut un espace mémoire d'au moins 300 bytes, et qui soit valide après l'appel de la fonction.

    Avant tout, il faut vérifier que la fonction ouvrirFichierSource() retourne bien NULL en cas d'erreur. Rien ne dit que "c:\\test.txt" existe et soit accessible sur la machine de test...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Par défaut
    ok c bon merci pour vos réponses, j'avais complétement oublié d'allouer de la mémoire pour le buffer dans la fonction lireFichierSource . Ca marche maintenant. C'est que je suis pas vraiment un spécialiste du C .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème fgets dans D D D
    Par Invité dans le forum Bibliothèque standard
    Réponses: 6
    Dernier message: 03/05/2010, 16h34
  2. Problème fgets et Visual 2005
    Par ouamtax dans le forum C
    Réponses: 3
    Dernier message: 06/04/2009, 21h06
  3. Problème fgets() => fichier
    Par Fabien25C dans le forum Débuter
    Réponses: 13
    Dernier message: 17/10/2008, 15h49
  4. Problème d'accent avec fgets
    Par d.w.d dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2006, 07h37
  5. Problème avec fgets et tube...
    Par tchingoo dans le forum POSIX
    Réponses: 5
    Dernier message: 22/08/2003, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo