Tableau de chaînes de caractères... - C++ - Programmation
Marsh Posté le 18-03-2003 à 11:36:55
(*indexv)[i]=s;
tu copies le pointeur vers une chaine stockée dans une variable locale
strcpy((*indexv)[i], s);
me semble plus indiqué
Marsh Posté le 18-03-2003 à 14:10:39
oulala ! t'as fais deux bêtises, je t'explique dès que j'ai le temps
Marsh Posté le 18-03-2003 à 14:10:46
commence par simplifier:
void readIndexTxt(char* filename, int* indexc, char** indexv)
et
//lecture du fichier d'index de mots :
readIndexTxt(argv[1],&indexc,indexv);
Marsh Posté le 18-03-2003 à 14:14:21
sizeof(char[40])
beurk
sizeof ma_variable
sizeof(mon_type)
Marsh Posté le 18-03-2003 à 14:15:47
la première, c'est un détail, mais dangeureux quand même,
tu déclares
Code :
|
donc tu réserves 40 caractères et tu autorises fgets à y écrire 80 caractères,
Code :
|
, mets une chaine de plus de 40 caractères sur une ligne dans ton fichier et ton pc va être content, surtout si l'impact n'est pas tout de suite visible.
Marsh Posté le 18-03-2003 à 14:20:45
y au aussi autre problèem. il faut faire l'allocation en 2 fois
une boucle pour allouer n pointeurs de caractères
une autre pour allouer m caracteres pour chacune de ces n pointeurs.
si tu fais les 2 d'un coup, il faut proprement tu n'as qu'un char* et pas un char* donc la double indirection ne fonctionne pas
Marsh Posté le 18-03-2003 à 14:22:35
deuxième erreur :
tu utilises indexv comme un tableau de pointeur sur des chaines
Code :
|
hors tu réserve je ne sais pas trop koi en mémoire, un truc à cheval entre les deux mallocs nécessaire
Code :
|
oui, deux mallocs sont nécessaire,
un pour le tableau de pointeurs
le deuxième dans une boucle pour allouer l'espace pour chaque chaine ; idéalement, tu peux allouer juste l'espace nécessaire pour la longueur de chaque chaine, ou prévoir plus (40 par exemple) si tu as l'intention de les modifier, de les rallonger ...
bref je te laisse corriger ton code
Marsh Posté le 18-03-2003 à 14:26:05
bien entendu il existe la possibilité d'alloué tout l'espace nécessaire à indexv puis de l'indexer par paquets de 40 caractères, seulement il faut soit changer sa déclaration, soit changer la manière d'y acceder
sur ce, @+, je repasserais dès que j'ai un peu de temps voir si tu t'en sors
Marsh Posté le 18-03-2003 à 14:37:51
dernier détail, bien que ton compilateur ajoute le code nécessaire à ton application pour que losrque celle-ci se termine, toutes les ressources allouées soient libérées, il est préférable de libérer chaque allocation de mémoire avec la fonction free() dès que tu as fini d'utiliser ta super liste de mots en tex surtout si ton programme fais autre chose après et qu'il n'en a plus besoin.
Marsh Posté le 20-03-2003 à 16:55:31
voilà j'ai trouvé comment faire un tableau dynamiques de chaines de caractères de longuer statique :
Code :
|
Maintenant, jen'arrive pas à passer le tableau x en argument à ma fonction readIndexTxt dans laquelle je voudrais faire la partie allocation et remplissage du code précédent
Pouvez-vous m'éclairer ??
Merci
Marsh Posté le 20-03-2003 à 20:10:21
Deaddy a écrit : cf mon post plus haut |
si il alloue la mem dans sa fct, il est obligé de faire un char *** ... sinon, il ne pourra pas modifier le pointeur passé en param !
Marsh Posté le 20-03-2003 à 22:12:53
exact ! mais dans ce cas (le tablo n'a pas été alloué) ca sert à rien de le passer en param
autant faire un truc du style:
char** readIndexTxt(char* filename, int* indexc)
{
char **x;
...
allocation de x
...
pas de free(x);
return x;
}
Marsh Posté le 21-03-2003 à 06:59:05
ceyquem a écrit :
|
Allocation de [25] mais cast en [20], ça va pas marcher...
C'est pas interdit de simplifier:
Code :
|
Marsh Posté le 21-03-2003 à 14:08:15
j'ai résolu mon pb en utilisant :
Code :
|
et en faisant
Code :
|
merci à tous pour votre aide !
Marsh Posté le 18-03-2003 à 11:34:22
Bonjour,
j'ai un problème lorsque je veux passer à un module un tableau de chaînes de caractères pour qu'il le remplisse.
ce module est censé lire toutes les lignes d'un fichier index.txt et les placer dans le tableau correspondant s'appelant indexv.
le remplissage dans le module se passe bien (je peux lire le tableau depuis le module sans pb) mais quand on revient dans le main, je n'arrive plus à y accéder. Voici le code :
[g]main.c[/b]
texindex.c
texindex.h
makefile
Et voici le résultat :
Une idée ??
Merci !