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 :

probleme de modification dans un tableau de structure


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut probleme de modification dans un tableau de structure
    bonsoir à tous,
    j'ai déclaré un tableau de structure qui contient 2 champs: le champs mot (qui est une chaine) et le champs page qui est un pointeur.

    j'ai une variable mot1="blabla" quand je la mets dans tableau[i].mot elle est bien stockée, mais après si je la modifie en mettant mot1="###" alors je retrouve le mot "###" dans le tableau, avez une solution à ce probleme? i.e que le tableau ne se modifie pas après mise à jour meme si je change le mot après

    merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    C'est simple, tu as probablement déclaré ta structure comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct st_mastruct {
        char * mot;
        POINTEUR page;
    };
    C'est déjà mal parti !

    Maintenant, il faut qu'on voit tout le code pour qu'on puisse t'aider.

  3. #3
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Ca doit venir du fait que tu utilises l'égalité et non la fonction strcpy (et malloc ?).
    Sinon sans le code ça paraît compliqué

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    c'est vrai j'ai déclaré la structure comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct maillon
    {
           char * mot;
           page* tete;
     
           };
    ce n'est pas correct?

    ça c'est la fonction qui me modifie le tableau (j'ai essayé avec le strcpy mais ça beugue)
    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
    int index_mettre_a_jour(char *mot, maillon table_index[],int *taille)
    {
     
     
         int i=0;
         while((i< *taille) && (table_index[i].mot != mot)&&(table_index[i].mot!="0"))
         { i++;}
            if(i>= *taille)
            {  
     
              *taille=*taille+1;
               realloc(table_index,*taille);
               table_index[i].mot=mot;
            }
            else
            {  
                if(table_index[i].mot=="0")
                {
     
                   table_index[i].mot=mot;
     
                }
            }
     
     
         return (i);
    }
    là c'est moi qui beugue

  5. #5
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Comme dit plus haut pour copier une chaîne dans une autre il faut utiliser strcpy
    De plus tu n'alloues pas de mémoire ! Donc pour utiliser strcpy il faut que tu penses à allouer ta mémoire (et à libérer aussi par la même occasion).
    La comparaison de chaînes ne se fait pas non plus avec de simples == et != il faut utiliser strcmp.
    Pour plus d'informations sur ces fonctions tu tapes dans google : man nom_de_la_fonction

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    donc il faut que j'alloue de l'espace mémoire pour la chaine de caractère?
    genre: malloc(mot)
    strcpy(....) ? c'est ça?

  7. #7
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Il faut que tu alloues la taille de 'mot' + 1 (pour le '\0').
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table_index[i].mot = malloc(strlen(mot) + 1);
    strcpy(table_index[i].mot, mot);
     
    /* Et ne pas oublier de libérer */
    free(table_index[i].mot);

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    ah merci beaucoup, je commence à comprendre mais il me reste une question (je sais que je pose trop de questions désolée :p)
    quand je libere la mémoire à la fin de la fonction, dans la suite du programme je peux pas retrouver le contenu de ma table puisqu'elle sera vide non? (suis je totalement à coté de la plaque?)

  9. #9
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Effectivement si tu libères dans ta fonction tu ne pourras pas utiliser ça ailleurs ^^
    Il faut que tu libères tout ça quand tu n'en as plus besoin. Tu peux faire une fonction 'liberer' qui free tout ce que tu as alloué

  10. #10
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    merci beaucoup pour ton aide, c'est vraiment très gentil, à un moment j'ai abandonné mon tp mais là je vais me remettre au travail grace à tes éclaircissements.
    encore une fois thanks a lot

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

Discussions similaires

  1. Réponses: 32
    Dernier message: 11/03/2007, 11h25
  2. probleme de blanc dans un tableau avec les positionnements en css
    Par rich25200 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/02/2007, 23h50
  3. Réponses: 2
    Dernier message: 05/02/2007, 16h16
  4. Réponses: 3
    Dernier message: 06/01/2007, 14h11
  5. [Tableaux] Problème de lignes dans un tableau
    Par Perymanu dans le forum Langage
    Réponses: 10
    Dernier message: 18/12/2006, 20h31

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