Par pitié, penses à la planète ! Ne fais pas de captures d'écran de ton terminal, c'est du texte : copies-colles simplement son contenu entre balises CODE.
Bon. decompose_ligne provoque potentiellement de jolies petites fuites de mémoire, je vois au moins un cas qui provoque une erreur de segmentation, on ne se sert pas des fonctions de la bibliothèque standard dédiées à l'analyse de chaînes, parfois on utilise strdup et parfois malloc/memcpy... passons. Je ne sais pas si tu as le droit de réécrire cette fonction mais c'est ce que je recommanderais.
fgets ne « gère » pas les lignes vides/blanches, elle te renvoie simplement la chaîne "\n" (ou " \t \t\t \n"..) et c'est à toi de l'analyser. Ce que je vois ici c'est que decompose_ligne ne prend pas en compte le caractère '\n' qui va donc se retrouver à la fin de ton troisième élément.
D'une manière générale il y a vraisemblablement des parties de ton programme dont tu n'es pas certaine du bon fonctionnement. Procède à des tests unitaires : isole ces parties, fonction par fonction s'il le faut, et intègre-les dans un programme vide indépendant du reste, que tu compiles et testes à part. Un exemple pour vérifier le bon fonctionnement de decompose_ligne justement (c'est juste un exemple, ajouter_serie_a_collection peut également être testée ainsi) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h> #include <stdlib.h> #define NELEMS (unsigned int)3 char **decompose_ligne(const char *line, unsigned int nelems) { /* ... */ } int main(int argc, char *argv[]) { for (int i = 1; i < argc; ++i) { char **table = decompose_ligne(argv[i], NELEMS); if (!table) continue; printf("decomposition de : '%s'\n", argv[i]); for (unsigned int j = 0; j < NELEMS; ++j) { printf(" element %u : '%s'\n", j, table[j]); free(table[j]); } free(table); } return 0; }
Partager