Le plus simple, me semble-t-il, est d'utiliser un tableau de pointeurs dynamique, pointeurs sur des chaînes de caractères.
-> déclaration d'un tableau:: char** chaines = NULL;
-> déclaration d'un indice: int indice = 0;
Si on a besoin de stocker une chaîne contenue dans un char* chaine:
-> réallocation: chaines = (char**)realloc (chaines, (++indice) * sizeof(char*));
Là il y a 2 méthodes de copie de la chaîne:
- soit une copie logique: chaines[indice-1] = chaine; ce qui implique de ne pas désallouer 'chaine',
- soit une copie physique:
-> allocation mémoire: chaines[indice-1] = (char*)malloc(strlen(chaine)+1);
-> copie physique: strcpy (chaines[indice-1], chaine); ne pas oublier de désallouer 'chaine'.
Pour imprimer un tableau, pas de mystères:
int i; for (i=0; i<indice; i++) printf ("%s\n", chaines[i]);
Nota: Evidemment il ne faut jamais oublier de vérifier si les malloc et realloc se sont bien déroulés.