fichier et liste chainée - C - Programmation
Marsh Posté le 24-03-2011 à 18:39:23
1. C'est quoi le symptome ?
2. Pkoi des listes chaines ? Lire le fichier ligne par ligne avec un compteur et hop le tour est joue ! Apres si tu veux garder en memoire ces lignes, c'est une autre question.
Marsh Posté le 24-03-2011 à 19:11:30
1- il ouvre le fichier et se bloque
2- je dois utiliser les listes chainées doublement
Marsh Posté le 24-03-2011 à 20:30:34
1- mets des printfs ou utilise un debuggeur pour essaye de voir ce qu'il se passe
2- ok
Marsh Posté le 24-03-2011 à 23:33:05
d'aprés ce que j'ai écrit,il n'y a pas d'erreurs de syntaxe ou de logiques??
Marsh Posté le 25-03-2011 à 00:46:11
Si il y avait une erreur de syntaxe, tu ne compilerais pas.
De ce que je vois, tu n'alloues pas la chaine de caractère cible avant ton strncpy()
De plus tu devrais initialiser tes pointeurs à NULL, juste une bonne pratique.
Marsh Posté le 25-03-2011 à 01:00:10
je n'ai pas bien compris "tu n'alloues pas la chaine de caractère cible avant ton strncpy() "
Marsh Posté le 25-03-2011 à 01:07:36
Code :
|
lnode->s doit être préalablement alloué par un malloc(strnlen(f)+1)
En effet strlencpy n'alloue pas ton buffer cible.
Une autre solution mais qui bouffe plus de mémoire est de déclarer ta structure dllist avec un
Code :
|
au lieu de
Code :
|
Marsh Posté le 25-03-2011 à 01:18:43
j'ai fais le changement de char s [100] mais là à l'execution il m'affiche toutes les lignes de mon texte séparé par une ecriture bizzare!
Marsh Posté le 25-03-2011 à 01:32:53
strlncpy() ne rajoute pas de '\0' à la destination si il n'en rencontre pas dans le nombre de caractère imparti.
Le 1 du strlen(f)+1 de ma réponse précédente n'est pas là pour faire joli...
Marsh Posté le 25-03-2011 à 01:41:54
oui mais le truc c'est qu'il maffiche ttes le lignes de mon fichier et nn pas le nbre n2 que j'ai choisi
Marsh Posté le 25-03-2011 à 01:50:02
Ben oui de la ligne 35 à 37 de ton code, ta boucle for affiche toutes les lignes...
Quand à la fonction utilitaire1(), elle doit gentiment planter.
Pense à vérifier l'initialisation de tes variables et ce que font chacune de tes boucles (surtout la deuxième).
Marsh Posté le 26-03-2011 à 00:59:38
Ben tu la parcoures bien dans ta première boucle for.
Par contre comme au début de ta fonction, courant n'est pas initialisé, ça ne peux pas le faire.
Ton deuxième for ne parcoure rien du tout.
Enfin tu n'appelles pas ta fonction avec les bon arguments dans le main().
Marsh Posté le 26-03-2011 à 01:32:46
re,
j'ai modifié cette fonction et maintenant elle m'affiche juste la ligne qui vient apré la ligne n1 que j'ai indiqué et nn pas le nbre de ligne n2
voici la nouvelle ecriture
void utilitaire1(char *argv[],struct dllist *lnode,int pos,int nbr)
{int i;
struct dllist *courant ;
courant=head;
for (i = 1;(courant)&& (i < pos); i++)
courant = courant->next;
if (pos == i)
{do
{printf("%s\t\n",courant->next->s);
}
while(i>nbr); }
}
Marsh Posté le 26-03-2011 à 02:09:44
C'est mieux mais...
Regarde:
Code :
|
PS: je sais pas si ça compile, mais l'idée est là
Edit: lIndex ++ !!
Marsh Posté le 26-03-2011 à 02:20:52
j'ai essayé mais cette fonction m'affiche ttes les lignes de mon fichier et si seulemnt si pFirst_line =1 si je mets 2 ça bloque et ça ne prend pas en charge pNb_print puisqu'il affiche ttes les lignes!!
Marsh Posté le 26-03-2011 à 02:29:12
Non!
h3bus a écrit : Ben oui de la ligne 35 à 37 de ton code, ta boucle for affiche toutes les lignes... |
Ensuite si tu a appelé ma fonction avec les même paramètres que ton utilitaire1() ça va pas marcher non plus, comme je te l'ai déjà signalé.
Marsh Posté le 24-03-2011 à 18:28:56
bonjour,
j'essais d'ecrire un prog qui permet d'afficher à partir de la ligne n1 n2 lignes d'un fichier texte et ceci à l'aide des chaines double chainage,le code compile et tout mais ça ne fonctionne pas or je ne trouve aucune erreur,tout parait logique si vous pouvez m'aider voici mon code