Copie de tableau de chaînes via fonction (c)

J’ai besoin d’aide. C’est assez rare mais là je décroche.

Je voudrais créer une fonction qui copie un tableau de chaîne dans un autre, en C (compilateur mingw et code::block).

Voici le prototype de ma fonction :

int copy_string_array(const char *ARRAY_OF_STRINGS_TO_COPY[], int total_number_of_strings_in_the_array_to_copy, char *copy_of_the_string_array[], int length_of_a_string_in_the_copy_array, int maximum_number_of_strings_in_the_copy_array)

La fonction renvoie le code d’erreur 0 (pas d’erreur) si tout s’est bien passé.
Son rôle est simple : elle lit chaque chaîne du premier tableau jusqu’à arriver au caractère ‘’ qui marque la fin de la chaîne, et elle écrit dans le tableau copie la chaîne qu’elle a lu, caractère par caractère
(avec bien entendu des contrôles pour vérifier qu’il y a assez de place).

1 - Déjà, je ne sais pas comment déclarer mes tableaux de chaînes.

Habituellement, je fais comme ça pour le tableau déjà rempli :

char *string_array_1[] = {"machin", "truc", "bidule", "chose", "jesaispas"};

Mais pour le tableau vide, je fais comment ?
Comme ça ?

char string_array_2[100][6] = {0};

Donc en gros, mon appel de fonction ressemble à ça :

copy_string_array(string_array_1, 5, string_array_2, 100, 6);

Dans le corps de la fonction, j’arrive parfaitement à lire chaque chaîne du tableau, et à en extraire chaque caractère :

printf("%sn", ARRAY_OF_STRINGS_TO_COPY[1]);
printf("%sn", *(ARRAY_OF_STRINGS_TO_COPY + 1));
printf("%in", strlen(ARRAY_OF_STRINGS_TO_COPY[1]));
printf("%cn", *(*(ARRAY_OF_STRINGS_TO_COPY + 1) + 2));

A noter que cette écriture fait planter :

printf("%sn", ARRAY_OF_STRINGS_TO_COPY[1][2]);

2 - Je croyais que les tableaux étaient des pointeurs, et qu’un tableau 2D était un pointeur sur pointeur, peut-être avais-je tort (ou peut-être est-ce mon compilateur qui ne supporte pas) ?
Pourquoi ne puis-je pas écrire comme ça ?

Et le problème fondamental se pose lorsque j’essaye d’écrire :

*(*(copy_of_the_string_array + 1) + 1) = *(*(ARRAY_OF_STRINGS_TO_COPY + 1) + 2);

Cette ligne fait planter le programme (mais pas la compilation).

Je soupçonne un problème de droits d’écriture avec les pointeurs, ou un truc plus complexe.

3 - Quelle est la bonne écriture pour écrire dans une chaîne d’un tableau de chaînes ?

Merci d’avance…

Pour ta question 1 :

printf("%sn", ARRAY_OF_STRINGS_TO_COPY[1][2]); <-- c’est pas %s mais %c

Pour ta question 2 :

Les tableaux sont des pointeurs, tu peux faire des trucs spéciaux pour optimiser le contenu => en.wikipedia.org…
Et après, vu que ce sont des pointeurs, si tu y mets de la merde ou si tu as un contenu de merde, t’obtiens de la merde :slight_smile:

Pour la question 3 : strncpy.

Par contre, si tu apprends le C, à l’école par exemple, alors, tu n’as peut-être pas vue l’allocation/libération de mémoire avec malloc/calloc/free, ce qui répondra à tes autres questions (genre : comment ne plus avoir à passer un tableau déjà initialisé, etc).

Désolé de la réponse tardive, j’ai eu un mémoire à faire entre temps.

J’ai trouvé ma réponse : il faut construire des tableaux dynamiques et passer leurs pointeurs, seule la première dimension peut-être laissée vide, que ce soit dans la déclaration ou dans les paramètres.