Les listes linéaires chaînés dans le langage c
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Les listes linéaires chaînés dans le langage c



  1. #1
    invitedbd63b3e

    Les listes linéaires chaînés dans le langage c


    ------

    Je vaux remplir une liste linéaire chaîné par une phrase puis l'afficher (chaque mot dans un maillon ).L'orsque j’exécute le programme un message s'affiche "main.exe a cesser de fonctionner"
    voici le code:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    struct cellule {      /* déclaration de la liste*/
                    char* mot ;
                     struct cellule *suiv;        };
    /**************************************************/
    typedef struct cellule maillon;
    /*********************************************************************/
    maillon *allouer()
     {
       return(( maillon*)malloc(sizeof(maillon)));
     }
    /***********************************************************************/
    void aff_val( maillon *p,char* ch)
    {
      p->mot=ch;
    }
    /************************************************************************/
    void aff_adr(  maillon *p, maillon *q)
    {
      p->suiv=q;
    }
    /***********************************************************************/
    char* valeur(maillon *p)
    {
        return(p->mot);
    }
    /************************************************************************/
    
    maillon *suivant( maillon *P) { return( P->suiv ); }
    /************************************************************************/
    void llc_mot(maillon**tete,char ch[20])
    {
        int taile;
    
        printf("Donner la taille de votre phrase");
        scanf("   %d",&taile);
        printf("Donner votre phrase  ");
        scanf("\n%s",&ch);
        maillon *p=NULL; maillon*q=NULL;
        p=allouer();
        aff_adr(p,NULL);
        *tete=p;
        char* ch1;
        char* ch2;
        ch1=strtok(&ch,"");
        aff_val(p,ch1);
        int i;
        for(i=0;i<taile;i++)
        {
            q=allouer();
            aff_adr(p,q);
            p=q;
            *ch2=strtok(NULL,"");
            aff_val(p,ch2);
        }
        aff_adr(p,NULL);
    }
    /*****************************************************************************/
    void Affiche(maillon *t)
    {
    maillon *p;
    p=t;
        while(p != NULL)
    {
          printf("->%s\t",(*p).mot);
         p=suivant(p);
    }
    }
    /****************************************************************************/
    int main()
    {
    maillon *t;
    char chaine[20];
    llc_mot(&t,chaine);
    Affiche(t);
    }
    SVP aidez moi pour résoudre ce problème
    Merci d'avance
    Cordialement

    -----

  2. #2
    invite1c6b0acc

    Re : Les listes linéaires chaînés dans le langage c

    Bonjour,

    Déjà, tu devrais corriger les warnings, et si tu n'en as pas modifier les paramètres de compilations pour en avoir.
    Parce qu'il y en a, dans ton programme, qui sont en fait des erreurs.
    En compilant avec gcc, j'obtiens : (c'est moi qui ai ajouté les commentaires en rouge)
    Code:
    Maouche.c: In function ‘llc_mot’:Maouche.c:40:5: attention : format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char **’ [-Wformat]
    c'est le scanf qui lit la phrase : du coup elle n'est pas lue correctement
    Maouche.c:47:5: attention : passing argument 1 of ‘strtok’ from incompatible pointer type [enabled by default]
    moi non plus, je ne comprends pas ce que tu essaie de faire avec strtok ... :)
    /usr/include/string.h:348:14: note: expected ‘char * __restrict__’ but argument is of type ‘char **’.h
    c'est la ligne de string.h qui donne le prototype de strtok : même warning qu'au dessus
    Maouche.c:55:13: attention : assignment makes integer from pointer without a cast [enabled by default]
    c'est la ligne "*ch2=strtok(NULL,"");" ch2 est de type char* donc *ch2 est de type char mais strtok retourne un char* (je ne comprends toujours pas ce que tu cherches à faire)
    Maouche.c: In function ‘main’:
    Maouche.c:78:1: attention : contrôle a atteint la fin non void de la fonction [-Wreturn-type]
    sans importance. il faut terminer le main par return 0;
    Maouche.c: In function ‘llc_mot’:
    Maouche.c:55:13: attention : ‘ch2’ may be used uninitialized in this function [-Wuninitialized]
    c'est le même warning que plus haut : tu utilise *ch2 sans avoir donné de valeur à ch2
    mais en fait c'est le *ch2 qui est fautif
    Donc ta phrase n'est pas lue correctement et la fonction strtok n'est pas appelée correctement.
    Le programme plante à la ligne 55 : au deuxième appel de strtok (je sais ça en utilisant un debugger et je t'encourage à le faire aussi), ce qui peut se comprendre, le premier appel s'étant mal passé.

    A+

Discussions similaires

  1. python : listes et chaînes
    Par invite05ccbb13 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 09/09/2014, 23h10
  2. langage C, utiliser des chaines de caractères
    Par invite49289c75 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 15/01/2013, 14h25
  3. concaténation de chaînes de caractères, langage C
    Par aureo91 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 14/12/2012, 07h37
  4. un ami dans plusieurs listes (facebook)
    Par invitedc1c8f63 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 02/01/2012, 15h07