[C]insere liste chaine dans un tableau

Fermé
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 16 juil. 2008 à 20:41
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 - 18 juil. 2008 à 14:20
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
A voir également:

5 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 juil. 2008 à 22:07
Salut,

tab[0] = *seq;
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 juil. 2008 à 22:14
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
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
16 juil. 2008 à 23:30
merci Lami
:)
0
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
17 juil. 2008 à 00:37
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
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
17 juil. 2008 à 11:53
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 juil. 2008 à 12:33
Salut Miss,

et tu as tendance à les oublier>

c'était par paresse ;-)
0
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
18 juil. 2008 à 12:26
à oublier quoi ? j'ai pas compris.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024
18 juil. 2008 à 12:30
Salut,

de liberer la mémoire allouée ;-)
0
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
18 juil. 2008 à 14:20
Il faudra que tu me dises quand la prochaine fois car en général j'essaye d'y faire attention.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
17 juil. 2008 à 13:09
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