Transformation d'un fichier en liste doublement chainée [Resolu] - C - Programmation
Marsh Posté le 30-12-2007 à 18:18:56
Beamo a écrit : 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é... |
Il faut évidemment que chaque chaine lue ait son propre espace mémoire... strdup() (POSIX.1, donc très portable) est bien pratique pour ça.
Marsh Posté le 30-12-2007 à 23:05:45
Je n'arrive pas à utiliser le strdup, cela me dit que la fonction n'est pas déclarée.
Il faut que mon code soit compilable sur un Linux.
Mais un strcpy devrait a peu près jouer le même rôle non ?
Comment se fait-il que ma variable se fait écraser même quand je fais un strcpy (tmp2, mot) et que je lance la fonction avec tmp2.
Lors du fgets (mot) suivant, cela change aussi mon maillon.
Le strcpy ne permet pas de faire l'allocation mémoire automatiquement ?
Beamo
Marsh Posté le 30-12-2007 à 23:19:00
Beamo a écrit : Je n'arrive pas à utiliser le strdup, cela me dit que la fonction n'est pas déclarée. |
Tu as inclus <string.h> ?
Tu n'es pas en mode -ansi -pedantic ?
Cette fonction est facilement reproductible avec
strlen() pour la mesure
malloc() pour l'allocation
strcpy() pour la copie.
Nota : strcpy() ne fait justement pas ce que fait strdup(). Pourquoi ne pas lire la doc des fonctions en cas de doute ?
man strcpy()
man strdup()
Marsh Posté le 31-12-2007 à 00:30:15
Oki merci !
J'ai vu un ancien post ou tu proposais la même chose et qq1 a montré comment l'utiliser avec malloc et strcpy.
J'ai testé cela fonctionne !
Merci
Beamo
Marsh Posté le 30-12-2007 à 17:57:24
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.
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
Message édité par Beamo le 07-01-2008 à 11:10:33