Programmation bas niveau (BNV) Help

Cours : Les doubles tableaux

Nous allons maintenant aborder un nouveau type de tableaux qui peut être très pratique : le double tableau.

Imaginons que j'ai une chaine de caractères et que je veuille la diviser en plusieurs mots.

J'ai :

char * long_str = "Tous les êtres humains naissent libres et égaux en dignité et en droits.\n"

et j'aimerais pour plus de clarté ranger tous ces mots dans un tableau qui ressemblerait à ça :

[0] Tous [1] les [2] êtres [3] humains [4] naissent [5] libres [6] et [7] égaux [8] en [9] dignité [10] et [11] en [12] droits

J'aurais besoin d'un tableau qui soit en fait un tableau de char *.

Ça tombe bien cela existe et cela s'écrit : char **.

char ** str_tab; str_tab[0] = "Tous"; str_tab[1] = "les"; str_tab[2] = "êtres";

Allouer la mémoire pour un char **

Pour allouer cette mémoire, il va falloir d'abord allouer la mémoire pour le tableau puis la mémoire pour chacune des chaines de caractères :

Dans l'exemple suivant, je veux stocker séparément les deux mots de la phrase "Hello World":

Je vais donc devoir allouer la mémoire pour 3 char * (pour un pointeur l'équivalent de '\0' c'est NULL à écrire en majuscules) :

char ** str_tab = malloc(3 * sizeof(*str_tab)); str_tab[2] = NULL; str_tab[0] = malloc(6 * sizeof(char)); str_tab[0][5] = '\0'; str_tab[1] = malloc(6 * sizeof(char)); str_tab[1][5] = '\0';

Libérer la mémoire d'un char **

Attention, tout pointeur que vous avez malloc doit être free vous allez donc devoir libérer la mémoire du char ** et la mémoire de chacun des char * à l'intérieur :

char ** str_tab = malloc(3 * sizeof(*str_tab)); str_tab[2] = NULL; str_tab[0] = malloc(6 * sizeof(char)); str_tab[0][5] = '\0'; str_tab[1] = malloc(6 * sizeof(char)); str_tab[1][5] = '\0'; int i = 0; while(str_tab[i] != NULL) { free(str_tab[i]); i = i + 1; } free(str_tab);
24 September 2025