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 tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut lecture tableau de char
    Bonjour,

    J'ai fait un prog qui lit des valeurs à partir d'un fichier.
    Voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ()
    {
      int i, l;
      FILE *src = NULL;
      FILE *f = NULL;
      int size[12];
      int taille;
      char* mot;
      char* tab[12];
     
    src = fopen ("huffman_DC.txt", "r");
    f = fopen("test.txt", "w");
     
    if((src == NULL) || (f == NULL))
    {
           printf("pb ouverture fichier\n");
    }
     
    for (i=0;i<12;i++)
    {
    	fscanf(src,"%d %s", &taille, mot);
        	fprintf(f, "%s", mot);
    	size[i] = taille;
    	tab[i] = mot;
    	printf("voila le mot de code %d %s \n", i, tab[i]); 
    }
     
    printf("voila tab mot %s \n", tab[4]); 
     
      fclose(src);
      fclose(f);
    Pour le premier printf, les valeurs affichées sont correctes (correspond à ce que j'ai dans le fichier) Par Contre pour le 2eme printf (affichage de tab[4]), il m'affiche la dernière valeur insérée dans le tableau. Je ne comprend pas d'où ca vient!!!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le pointeur mot n'est pas initialisé: Il peut pointer sur n'importe quoi.
    Comportement indéfini.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut
    mot est un pointeur qui me permet de lire le fichier. tu me suggère de l'initialiser à NULL.
    Sinon je ne vois pas le rapport avec mon pb!!
    Merci

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ouinih :
    tu me suggère de l'initialiser à NULL.
    Ce n'est pas du tout ce que te suggères Médinoc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      char* mot;
    ....
    	fscanf(src,"%d %s", &taille, mot);
    Pour stocker une chaîne de caractères, il faut un tableau de char, pas un char*. C'est la définition de mot qui est incorrecte, il FAUT que mot soit un tableau (suffisamment grand) de char

  5. #5
    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
    il faut que tu alloues de la mémoire pour mot : soit tu le déclares comme celaauquel cas tu auras un tableau de 100 caractères, soit tu utilises malloc() (sans oublier free())

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut
    j'ai fait ce que vous me demander, mais j'ai tjrs le meme pb: l'execution du prog donne la meme chose

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

Discussions similaires

  1. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  2. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  3. [Collections] lecture tableau 2 dimensions
    Par heloise dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2004, 10h49
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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