1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| temp = malloc(sizeof (char) * 1000);
av = malloc(sizeof (char) * 1000);
while (tab[i] != '\0')
{
while (tab[i] != '\n')
{
temp[pos] = tab[i];
i++;
pos++;
}
av[n] = temp;
n++;
pos = 0;
i++;
} |
Cette partie est incorrecte puisque av[n] est (ou devrait être) un char et temp est (ou devrait être) un char *. On devrait avoir
char** av = malloc(sizeof (char*) * 1000);
Mettre temp dans av[n] revient à remplir av avec toujours la même valeur : l'adresse du tableau temp.
Si je comprend ce que tu veux faire (mais ce n'est pas sur) :
- tu découpes tab en lignes en mettant chaque ligne dans temp.
- Ensuite, tu alloues de la place pour mettre cette ligne en mettant l'adresse du tableau alloué dans av[n].
- Puis tu copies dans ce tableau la ligne qui est dans temp
- et tu recommence jusqu'à la fin de tab
- Tu fais ce que tu dois faire avec ces chaînes
- puis tu désalloue tous les tableaux dont l'adresse est dans av, puis av et temp et c'est fini.
Ou alors (ce qui dépend de ce que tu veux précisément en faire ensuite):
- tu explore le tableau tab pour trouver les débuts des lignes
- tu places l'adresse (dans tab ) du premier caractère de chaque début de ligne dans av. Ceci évite de recopier les lignes et d'avoir le tableau temp . Terminer le tableau av par NULL quand on est arrivé à la fin de tab
- On peut ainsi retrouver facilement le début de chaque ligne et sa longueur ( par différence avec l' adresse de la ligne suivante ) et le nombre de lignes.
- à la fin, désallouer av.
Partager