Salut à tous
Je voudrais recupérer la liste des fichiers d'un repertoire et stocker les noms de fichier dans un tableau de chaines :
int counter;
counter = 0;
SYM_ENTRY *SymPtr = SymFindFirst (SYMSTR ("folder"), FO_SINGLE_FOLDER);
while (SymPtr)
{
strcpy(noms[counter],SymPtr->name);
SymPtr = SymFindNext ();
counter++;
}
Mon problème c'est dans la déclaration de la variable tableau "noms" pour une allocation dynamique. Je vois pas trop comment m'y prendre, si quelqu'un pouvait me donner un coup de main.
Merci !
Pen^2 Le 05/10/2006 à 18:51 En fait on préfère doubler la taille à chaque fois en principe (après faut voir, sur TI, c'est un peu particulier : pas beaucoup de RAM...)
PS1 : faut pas oublier de tronquer le tableau à la fin de la boucle
PS2 : free ne fait rien quand le pointeur est null, non ? (ou alors je confond, ça fait longtment que je n'ai pas fait de C)
Merci pour la rapidité de vos réponses, ça fait plaisir !
Zephyr tu me dis que c'est long comme méthode. Je voulais savoir dans le cas d'un explorer quelle méthode était employée pour que ce soit rapide ? Parce que c'est un peu le même principe non ? On stocke la liste des fichiers puis on l'affiche ?
Pourquoi ne pas stocker les adresses des noms des fichiers?
Tu évalues le nombre de fichiers dans un dossier, tu alloues ta table d'adresse et tu l'as complète.
ça ne change rien au pb, les noms de fichiers ont déjà une taille fixe, donc en fait tu proposes la même chose que Sasume...
alloca ne serait pas super applicable ici, à moins 1) que le contenu soit assez petit pour tenir dans la pile et 2) de stocker au fur et à mesure dans une liste chaînée, puis après faire une deuxième passe qui copie la liste chaînée dans un tableau malloc-é
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
Zeph Le 06/10/2006 à 08:35 au passage, il parait que sur ti l'implémentation de realloc n'est pas tout à fait standard (bicause HeapRealloc derrière), et qu'en cas d'échec le pointeur est libéré, donc "if (ptr) free (ptr)" à supprimer dans #1

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
J'ai utilisé la solution de Sasume avec deux boucles et ça marche bien, mais j'ai un autre problème : je veux utiliser le tableau dans une autre fonction. Donc j'utilise le passage par adresse comme ceci :
noms est le tableau de chaines, counter le nombre d'entrées du tableau
[7]
fonction(&noms,counter); // Appel de la fonction
// Fonction :
fonction(char *tabnoms, int count)
{
int a;
a=0;
DrawStr(10,10,tabnoms[a] , A_NORMAL);
}
Le problème c'est que ça n'affiche pas le bon résultat, comme si l'adresse avait changée. Pourtant il me semble que la syntaxe est bonne.
Zeph Le 08/10/2006 à 17:54 heu tabnoms est censé être un tableau de chaines ? parceque ta fonction prend un tableau, donc c'est incompatible (et tu passes "&noms" en paramètre, ce qui est curieux aussi puisqu'un tableau est déjà un pointeur)

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Sally Le 08/10/2006 à 18:05 Oui, plus précisément "char *" c'est un tableau de caractères donc c'est une seule chaîne, pour faire un tableau de chaînes il faut "char**" ; et d'autre part un tableau est toujours représenté par un pointeur vers son premier élément, donc c'est déjà automatiquement du passage par adresse et si tu ajoutes un & tu te retrouves avec l'adresse du pointeur (soit un char***), qui n'est pas ce que tu veux. Tu as bien activé les warnings à la compilation ? parce que le compilateur devrait te prévenir qu'il y a des problèmes, là...

« Le bonheur, c'est une carte de bibliothèque ! » —
The gostak distims the doshes.Membrane fondatrice de la confrérie des
artistes flous.
L'univers est-il un
dodécaèdre de Poincaré ?
(``
·\ powaaaaaaaaa ! #love#
et surtout si tu as utilisé la même structure de donnée que zephyr, tes chaînes ne seront pas stockée en tant que char *, mais en tant que char[18] ^^
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
Je l'ai modifié comme ça :
fonction(noms,counter); // Appel de la fonction
// Fonction :
fonction(char **tabnoms, int count)
{
int a;
a=0;
DrawStr(10,10,tabnoms[a] , A_NORMAL);
}
Mais ça ne fonctionne toujours pas...
Savez-vous où je peux trouver une explication sur les warnings parce que j'ai ceux là que je ne comprends pas :
Extra tokens at end of #include directive
No newline at end of file
Zeph Le 10/10/2006 à 19:09 le 1er c'est que tu as du mettre quelque chose après le "#include <fichier>", ce qui n'est pas censé être valide, le 2eme c'est qu'il faut ajouter un retour à la ligne après la dernière ligne. sinon ton code devrait marcher, tu peux le mettre en entier ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Zeph Le 10/10/2006 à 19:36 ah ui merde on était parti là-dessus; du coup c'est un char (*var)[18] qu'il faut que tu passes à ta fonction, pas un ** (d'ailleurs ça aurait du faire un warning non ?)

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Lukhan Le 10/10/2006 à 19:45Edité par Lukhan le 10/10/2006 à 19:53 Ouais ça fait pas mal de warning
J'ai résolu le premier, je mettait des ";" a la fin des #include
Zeph Le 10/10/2006 à 19:47 en règle génerale quand y'a des warnings c'est mauvais, t'aurais du directement poster les warnings en fait, ça aide pas mal pr répondre à la question

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
"Passing argument 1 of 'fonction' from incompatible pointer type"
Y'a pas le detail des warnings dans l'aide de TIGCC ?
Zeph Le 10/10/2006 à 19:59 non mais bon là c'est quand même plutôt explicite...

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Merci c'est résolu maintenant