[C]insere liste chaine dans un tableau

stroumpf Messages postés 292 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
bonsoir à tous,
jai une fonction qui prend en enrée une liste chaine(liste de mots) et qui la stocke dans le 1er elemnt du tableau.
apres, un simple affichege

  
void GenNseq(Liste **seq)
{int i;
char *mot;
     Liste ** tab;
    tab = (Liste **) malloc (20 * sizeof(Liste *));
      tab [0]=&seq;
    printf ("%s", *tab[0]->mot);
}



ya une erreur dans la 6eme ligne du code :
cannot convert `Liste**' to `Liste*' in assignment

merci
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    tab[0] = *seq;
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    seq c'est un pointeur de pointeurs de type Liste donc *seq c'est un pointeur
    **tab est un pointeur de pointeurs de type Liste donc tab[0] est un pointeur de type Liste est on peut écrire aussi *tab pour le 1er élément

    *tab ne peux pas contenir l'adresse d'un pointeur de pointeurs comme tu as essayé de le faire

    voici un exemple (j'ai remplacé le type Liste avec int

    lami20j@debian:~$ cat ccm.c
    #include<stdio.h>
    #include<stdlib.h>
    
    void GenNseq(int **seq)
    {
            int i;
            int ** tab;
            tab = (int **) malloc (20 * sizeof(int *));
                           tab [0]=*seq;
                           printf ("%p - %p\n", tab[0],*seq);
    }
    
    int main()
    {
            int **seq;
            GenNseq(seq);
            return 0;
    }
    lami20j@debian:~$ gcc ccm.c
    lami20j@debian:~$ ./a.out
    0x489d - 0x489d
    lami20j@debian:~$
    j'affiche seulement les adresses
    0
    1. stroumpf Messages postés 292 Statut Membre 2
       
      merci Lami
      :)
      0
    2. stroumpf Messages postés 292 Statut Membre 2
       
      Dans le cas où jai un tableau de liste: chaque element du tableau contient une liste, comment faire pour se pointer vers l'entete de la liste?
      merci;
      0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    1) Il faut juste faire un tableau de pointeurs vers des Liste (genre un Liste **). Attention car qui dit malloc dit free et tu as tendance à les oublier, alors que c'est TRÈS important (tu t'es déjà demandé pourquoi quand tu lançais et fermais word 5 fois de suite, la RAM diminuait petit à petit ? :p) :
    #include <stdlib.h>
    
    int main(){
      unsigned n = 5;
      int *p = (int *)malloc(n*sizeof(int)); // alloue un tableau de 5 entiers
      //...
      // dès que je n'ai plus besoin de la zone allouée je la libère :
      free(p);
      return 0;
    }
    

    Ici on alloue un tableau d'int, mais si c'est un tableau de "Liste *" il suffit simplement de remplacer les "int" par "Liste *" :
    #include <stdlib.h>
    #include "Liste.h" // le header dans lequel la structure Liste est déclarée
    
    int main(){
      unsigned n = 5;
      Liste **p = (Liste **)malloc(n*sizeof(Liste *)); // alloue un tableau de 5 pointeurs vers Liste
      //...
      // dès que je n'ai plus besoin de la zone allouée je la libère :
      free(p);
      return 0;
    }
    

    2) Si tu peux programmer en C++ c'est encore plus facile, c'est comme des legos :
    #include <list>
    #include <vector>
    
    int main(){
      std::vector<std::list<int> > mon_tableau_de_liste;
      // ...
      // pas de malloc/calloc/... ou de new, dont pas de free ou de delete
      return 0;
    }

    Pour plus de détails sur la méthode en C++
    http://www.commentcamarche.net/faq/sujet 11255 introduction a la stl en c standard template library

    Bonne chance
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut Miss,

    et tu as tendance à les oublier>

    c'était par paresse ;-)
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
       
      à oublier quoi ? j'ai pas compris.
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Salut,

        de liberer la mémoire allouée ;-)
        0
      2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Il faudra que tu me dises quand la prochaine fois car en général j'essaye d'y faire attention.
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. stroumpf Messages postés 292 Statut Membre 2
     
    salut Lami, jai un probleme avec cette fonction qui doit extraire le dernier mot d'une phrase donnée en parametre.
    Qaund j'execute le programme se plante.
    char* dernier(char *phrase)
    {
          char *pointeur;
         char* copi;
    char *separateur = { " " };
    //char *buff;
      //   buff = (char*)malloc(sizeof(char)) ;
        //  buff =phrase;
    //strcpy(buff, phrase);
    pointeur = strtok(phrase, separateur );
    while( pointeur != NULL){
    copi = pointeur;
    printf("%s\n", pointeur);
    pointeur = strtok(NULL, separateur); 
    }
    printf("-> %s\n", copi);// le dernier mot
    
    
         
    }
    
    0