Problème fgets et remplissage de liste

Résolu/Fermé
Mondissa - 17 mars 2011 à 10:50
 Mondissa - 17 mars 2011 à 13:49
Bonjour tout le monde,

J'essaye d'écrire un programme qui puisse récupérer le contenu d'un fichier(liste des points d'accès wifi) dans une liste simplement chainée,c simple hein :D
Mon problème c'est que en essayant d'afficher le contenu de la liste après remplissage, on m'affiche que la dernière ligne du fichier * nbre de lignes du fichier :/
Merci pour votre aide, j'arrive pas à localiser le problème,voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define TAILLE_MAX 20

//List_WiFi
typedef struct check check;
struct check{

   char*  essid;
   struct check *next;

};
typedef check* llist;

llist ajouterEnTete(llist liste, char chaine[TAILLE_MAX])
{
    check* nouvelElement = malloc(sizeof(check));
    nouvelElement->essid = chaine;
    nouvelElement->next = liste;
    return nouvelElement;
};

void afficherListe(llist liste)
{
    check *tmp = liste;
    while(tmp != NULL)
    {
        printf("%s ", tmp->essid);
        tmp = tmp->next;
    }
};
int main(int argc, char *argv[])
{

   FILE * f;
   char ch[TAILLE_MAX];
   llist maListe = NULL;
   system("/home/sst/Documents/List.sh");
   printf("Les réseaux sans fil disponibles sont: \n\n\r");
   f=fopen("fich.txt","r");
   if (f == NULL)
      perror("fich.txt");
   else
   {
         while(fgets(ch, TAILLE_MAX, f) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
        {
         maListe = ajouterEnTete(maListe, ch);
        }
 afficherListe(maListe);
   }
   fclose(f);
return 0
}






2 réponses

Bonjour

Chaque fois que tu ajoutes un élément à ta liste, dans le champ essid, tu ajoutes ch.
Mais il n'y a qu'une seule variable ch dans ton programme. Toutes tes instances de struct check pointent sur la même variable, normal, qu'elles affichent la même chose, la dernière qui a été mise dedans.

Il faudrait, à chaque ajouterEnTete, allouer de la place pour la chaîne, recopier la chaîne, et mémoriser le pointeur sur la zone allouée. Et ne pas oublier les désallocations quand tu détruis ta liste.
2
Merci beaucoup le père pour ta réponse, mon problème est résolu maintenant :) la liste des pts d'accès s'affichent parfaitement

Merci une autre fois :)
0