Beamo | Bonjour,
Je cherche à transformer un fichier en liste doublement chainée.
Mon fichier contient un mot de moins de 32 caractères par ligne. Et je veux que chaque ligne soit un maillon de ma chaîne.
Code :
- #include<stdlib.h>
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- typedef struct liste_ {
- char *mot;
- struct liste_ *precedant;
- struct liste_ *suivant;
- }
- liste;
- liste *initliste (char *mot) {
- liste *L;
- L = (liste*)malloc(sizeof(liste));
- L->mot = mot;
- L->precedant = NULL;
- L->suivant = NULL;
- return L;
- }
- void addendliste(char *mot, liste *L) {
- liste *T, *tmp;
- T = (liste*)malloc(sizeof(liste));
- tmp = (liste*)malloc(sizeof(liste));
- tmp = L;
- while (tmp->suivant != NULL)
- tmp = tmp->suivant;
- T->mot = mot;
- T->precedant = tmp;
- T->suivant = NULL;
- tmp->suivant = T;
- }
- int main() {
- liste *L;
- int length = 1;
- char mot[32];
- char tmp[32];
- FILE *lect;
- /* transformation du dico en liste chainee */
- lect = fopen ("fichier.txt", "r" );
- fgets(mot, 32, lect);
- strcpy (tmp, mot);
- L = initliste(tmp);
- while (fgets(mot, 32, lect)!= NULL) {
- /*strcpy (tmp2, mot);*/
- addendliste(mot, L);
- length++;
- }
- fclose (lect);
- printf("L: %sL->suivant: %s", L->mot, L->suivant->mot);
- return 0;
- }
|
Mon gros soucis est que à chaque fois que je fais un fgets il écrase un des maillons (car cela pointe vers la même adresse...). J'ai essayé d'utiliser un char xxx[32] en tant que buffeur mais cela ne m'a pas aidé...
Des idées ?
Merci,
Beamo |