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…