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 :

lecture puis ecriture dans un fichier


Sujet :

C

  1. #21
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Le problème vient de ta variable x dans la fonction lecture_fichier : elle est locale, ce qui veut dire que même si tu fais un
    en fin de fonction, une fois que tu es revenu à la fonction appelante (ie main), cette mise à jour est oubliée et quand tu reviens dans la fonction pour lire f2, x est réinitialisé à 0 :
    D'autre part, il y a un problème du côté des malloc. En effet, la fonction lecture_fichier alloue un espace mémoire dans lequel elle va mettre ce qu'elle lit dans le fichier et renvoie un pointeur vers le premier élément de cet espace. Quand tu appelles la fonction une première fois, tu appelles ce pointeur matrice_lecture. Le problème, c'est que tu fais exactement la même chose quand tu appelles une seconde fois : le fonction alloue un autre espace mémoire (qui n'a aucune raison d'être concaténé au premier) et tu nommes le pointeur qu'elle te fournit matrice_lecture, ce qui signifie que tu perds le pointeur vers l'espace mémoire alloué lors du premier appelle.

    La solution serait donc de calculer le nombre de lignes des deux fichiers, puis de les additionner, puis de créer une matrice suffisamment grande pour contenir les deux fichiers (ie avec nb=nb1+nb2 lignes) et enfin de lire les deux fichiers l'un après l'autre mais en un seul appelle de fonction.

    Enfin, dans la fonction nb_lignes, tu utilises la fonction fgets. cette fonction prend trois paramètres :
    1) un pointeur vers un tableau de caractères de taille suffisante pour contenir la ligne
    2) la taille de ce tableau de caractères
    3) le flux où il faut lire les données
    Dans ta fonction, le paramètre taille (26) est plus grand que la taille réelle du tableau (10 ou 1). Il y a donc risque que fgets essaie de lire plus données que le tableau n'est capable d'en contenir. Dans le code que je t'avais donné, j'avais défini une constante NBMAXCHARPARLIGNE (bien plus grande que la taille réelle des lignes pour être sûr de toujours lire les lignes en entier) et je l'utilisais aussi bien dans la définition du tableau qui allait contenir les lignes que dans l'appelle de la fonction fgets. Comme ça, pas de risque de se tromper.

    Bon courage !!!

  2. #22
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ok je vais essayer de gérer tous ces soucis.

    merci

  3. #23
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Merci pour ton aide. Le programme fonctionne niquel.

    tchao

    charly

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Lecture et Ecriture dans un fichier Excel
    Par qiqi1111 dans le forum C++
    Réponses: 2
    Dernier message: 18/12/2008, 19h10
  2. lecture et ecriture dans un fichier PDF
    Par kha_yassine dans le forum Documents
    Réponses: 1
    Dernier message: 05/07/2007, 19h36
  3. Réponses: 4
    Dernier message: 19/02/2007, 18h58
  4. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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