Hello,
Tu cherches à remplir la mémoire allouée par malloc(). Ta fonction n'a donc pas besoin de l'adresse de « ex », mais seulement de ce qu'elle contient (le résultat de malloc()). Tu peux donc largement simplifier ton programme en éliminant le « & » et en adoptant le même type de donnée de chaque côté.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void test(char ** trois)
{
trois[0] = "chaine 0";
trois[1] = "chaine 1";
trois[2] = "chaine 2";
}
void main()
{
char **ex = malloc(3 * sizeof(char *));
test(ex);
printf("%s %s %s\n", ex[0], ex[1], ex[2]);
free(ex);
} |
Ensuite, en déclarant le tableau statique, tu peux utiliser le même code car « ex » (seul) et « &ex » (seul aussi) te renverront la même valeur. Par contre, il faut penser à retirer le free() !
Si, toutefois, le but de cet exercice est de trouver un moyen facile d'initialiser un tableau de chaînes au départ, sache que tu peux les écrire sous la forme d'un ensemble :
char * ex [3] = { "chaine 1", "chaine 2", "chaine 3" };
Partager