Envoyer un double tableau à une fonction en C
Résolu
pandageek
Messages postés
379
Statut
Membre
-
pandageek Messages postés 379 Statut Membre -
pandageek Messages postés 379 Statut Membre -
Bonjour,
voici mon code C :
je veux passer mon double tableau à ma fonction mais j'ai une jolie fenêtre qui me dit que mon programme à cessé de fonctionner.
messages d'erreur :
la console n'affiche rien excepté un statut étrange :
merci de me dire comment faire passer ce tableau.
voici mon code C :
char createLogs(char pathLogs[], char retourCreateLogs[]) { char i = 0; for (i=0 ; i<12 ; i++) { printf("%s\n", pathLogs[i]); } return 1; } int main() { char pathLogs[12][100] = { "txt\\0.txt", "txt\\1.txt", "txt\\2.txt", "txt\\3.txt", "txt\\4.txt", "txt\\5.txt", "txt\\6.txt", "txt\\7.txt", "txt\\8.txt", "txt\\9.txt", "txt\\10.txt", "txt\\11.txt" }, retourCreateLogs[12] = {0}; createLogs(pathLogs, retourCreateLogs); }
je veux passer mon double tableau à ma fonction mais j'ai une jolie fenêtre qui me dit que mon programme à cessé de fonctionner.
messages d'erreur :
warning: passing argument 1 of 'createLogs' from incompatible pointer type note: expected 'char *' but argument is of type 'char (*)[100]'|sur la ligne d'appel à la fonction et celle de déclaration de la fonction.
la console n'affiche rien excepté un statut étrange :
Process terminated with status -1073741510 (0 minutes, 7 seconds)
merci de me dire comment faire passer ce tableau.
A voir également:
- Envoyer un double tableau à une fonction en C
- Double ecran - Guide
- Tableau word - Guide
- Whatsapp double sim - Guide
- Fonction si et - Guide
- Trier un tableau excel - Guide
5 réponses
Ce que tu fais ce n'est pas un double tableau, mais un tableau de chaînes de caractères. Alors oui une chaîne de caractère c'est un tableau, mais dans ce cas tout est pointeur et on ne s'en sort plus.
Bref, essayes comme ceci (j'ai enlevé ce qui ne servait à rien, remets les si tu veux)
Remarque : si c'est pour afficher des informations aussi régulières que ça, c'est inutile de créer à la main tes pathlogs, utilises ta boucle !
Bref, essayes comme ceci (j'ai enlevé ce qui ne servait à rien, remets les si tu veux)
void createLogs(char* pathLogs[]) { int i; for (i=0 ; i<12 ; i++) printf("%s\n", pathLogs[i]); } int main() { char* pathLogs[12] = { "txt\\0.txt", "txt\\1.txt", "txt\\2.txt", "txt\\3.txt", "txt\\4.txt", "txt\\5.txt", "txt\\6.txt", "txt\\7.txt", "txt\\8.txt", "txt\\9.txt", "txt\\10.txt", "txt\\11.txt" }; createLogs(pathLogs); return 0; }
Remarque : si c'est pour afficher des informations aussi régulières que ça, c'est inutile de créer à la main tes pathlogs, utilises ta boucle !
for (i=0 ; i<12 ; i++) printf("txt\\%d.txt\n", i);
la régularité c'est pour les tests ^^
en mettant :
et :
j'obtiens :
en mettant :
(ligne pointé par l'erreur) char createLogs(char *pathLogs[], char retourCreateLogs[])
et :
createLogs(pathLogs, retourCreateLogs);
j'obtiens :
note: expected 'char **' but argument is of type 'char (*)[100]'
c'est a peu près la même fonction
char lectureLogs(char *pathLogs[], char *retourReadLogs[]) { char i = 0; FILE *folder = NULL; for (i=0 ; i<12 ; i++) { folder = NULL; if (existFolder(pathLogs[i], NULL)) { folder = fopen(pathLogs[i], "r"); fgets(retourReadLogs[i], 100, folder); } else { retourReadLogs[i] = "NULL"; } } fclose(folder); return 1; } int main() { char *pathLogs[12][100] = { "txt\\0.txt", "txt\\1.txt", "txt\\2.txt", "txt\\3.txt", "txt\\4.txt", "txt\\5.txt", "txt\\6.txt", "txt\\7.txt", "txt\\8.txt", "txt\\9.txt", "txt\\10.txt", "txt\\11.txt" }; char *retourReadLogs[12][1000]; lectureLogs(pathLogs,retourReadLogs); }
Salut Pandageek, KX,
Je pense que ce serait bien de clarifier pourquoi Pandageek veut créer un "double tableau". Compte tenu de la nature des chaînes en C, ce qui serait exact, ce serait :
C'est à dire, non pas un tableau à deux dimensions de pointeurs sur des char, mais un tableau à deux dimensions de char. Note la disparition du * dans la déclaration.
Ce qui revient à dire : déclarer un tableau de dimension 12 dont chaque "rangée" peut contenir 100 char. Donc, de l'espace pour 12 chaînes C de taille maximale 100 (y compris le \0).
Pandageek : est-ce la raison pour laquelle tu veux veut faire un tableau à "deux dimensions" ?
Dal
Je pense que ce serait bien de clarifier pourquoi Pandageek veut créer un "double tableau". Compte tenu de la nature des chaînes en C, ce qui serait exact, ce serait :
char pathLogs[12][100] = { "txt\\0.txt", "txt\\1.txt", (...)
C'est à dire, non pas un tableau à deux dimensions de pointeurs sur des char, mais un tableau à deux dimensions de char. Note la disparition du * dans la déclaration.
Ce qui revient à dire : déclarer un tableau de dimension 12 dont chaque "rangée" peut contenir 100 char. Donc, de l'espace pour 12 chaînes C de taille maximale 100 (y compris le \0).
Pandageek : est-ce la raison pour laquelle tu veux veut faire un tableau à "deux dimensions" ?
Dal
char* pathLogs[12] est également correct, ce qui permet de passer n'importe quel char* dans le tableau, sans se limiter à 100 caractères, ni les utiliser inutilement quand il n'en utilise que 10 comme ici.
Le problème c'est que pandageek n'est pas cohérent entre les types des tableaux qu'il passe dans la fonction et ceux qui sont déclaré dans cette fonction.
En utilisant char* pathLogs[] dans la fonction c'est plus souple qu'un double tableau où l'on serait obligé de spécifier la taille du deuxième tableau : char pathLogs[][100]
Mais il faut bien sûr que le pathLogs déclaré dans le main soit de même type, et non pas un mélange des genre avec un char* pathLogs[12][100] qui serait alors un double tableau de char* et donc un triple tableau de char !!!
Le problème c'est que pandageek n'est pas cohérent entre les types des tableaux qu'il passe dans la fonction et ceux qui sont déclaré dans cette fonction.
En utilisant char* pathLogs[] dans la fonction c'est plus souple qu'un double tableau où l'on serait obligé de spécifier la taille du deuxième tableau : char pathLogs[][100]
Mais il faut bien sûr que le pathLogs déclaré dans le main soit de même type, et non pas un mélange des genre avec un char* pathLogs[12][100] qui serait alors un double tableau de char* et donc un triple tableau de char !!!
Oui, je suis d'accord avec toi char* pathLogs[12] est très bien pour l'initialisation de cette variable et optimise la mémoire puisque le compilateur connait la longueur des chaînes à insérer en les insérant à la suite de la déclaration et qu'on n'a visiblement pas besoin de 100 char.
Mais tu vois que notre ami Pandageek déclare de la même façon "retourReadLogs" et qu'il veut visiblement l'utiliser dans la fonction appelée pour stocker 100 char avec fgets.
C'est ce qui m'a mis la puce à l'oreille (bien qu'il mette parfois un indice 1000 et parfois un indice 100,... bref).
Maintenant, je ne peux que faire des suppositions, c'est à Pandageek de s'exprimer.
(il y a plein d'autres problèmes dans le code, mais déjà, ce serait bien de clarifier celui-là)
Dal
Mais tu vois que notre ami Pandageek déclare de la même façon "retourReadLogs" et qu'il veut visiblement l'utiliser dans la fonction appelée pour stocker 100 char avec fgets.
C'est ce qui m'a mis la puce à l'oreille (bien qu'il mette parfois un indice 1000 et parfois un indice 100,... bref).
Maintenant, je ne peux que faire des suppositions, c'est à Pandageek de s'exprimer.
(il y a plein d'autres problèmes dans le code, mais déjà, ce serait bien de clarifier celui-là)
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question