ceyquem E falso sequitur quodlibet | 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]
Code :
- #include<string.h>
- #include "texindex.h"
- int main(int argc, char** argv)
- {
- int i=0;
- int indexc=0;
- char** indexv;
- //lecture du fichier d'index de mots :
- readIndexTxt(argv[1],&indexc,&indexv);
-
- printf("\nVérification : %d\n",indexc);
- for(i=0;i<indexc;i++)
- {
- printf("Vérification : indexv[%d]\t:\t%s\n",i,indexv[i]);
- }
- printf("\n" );
- return EXIT_SUCCESS;
- }
|
texindex.c
Code :
- #include "texindex.h"
- void readIndexTxt(char* filename, int* indexc, char*** indexv)
- {
- int i=0;
- FILE* f;
- //tampon de lecture
- char s[40];
-
- if((f=fopen(filename,"r" ))==NULL)
- {
- printf("Erreur d'ouverture du fichier %s\n",filename);
- exit(1);
- }
- //comptage des mots contenus dans le fichiers (un par ligne)
- (*indexc)=0;
- while((fgets(s,80,f))!=NULL) (*indexc)++; //ajout d'un mot
- //allocation mémoire
- (*indexv)=malloc((*indexc)*sizeof(char[40]));
- //retour au début du fichier
- rewind(f);
- //remplissage de la liste de mots
- printf("Chargement de la liste de mots" );
- printf("\n" );
- while((fgets(s,80,f))!=NULL)
- {
- (*indexv)[i]=s;
- printf("Chargement de : indexv[%d]\t:\t%s",i,(*indexv)[i]);
- i++;
- }
- fclose(f);
- }
|
texindex.h
Code :
- #include<stdlib.h>
- #include<stdio.h>
- void readIndexTxt(char* filename, int* indexc, char*** indexv);
|
makefile
Code :
- all : main clean
- main : main.o texindex.o
- gcc -g main.o texindex.o -o main
- main.o : main.c texindex.h
- gcc -g -c main.c
- texindex.o : texindex.c texindex.h
- gcc -g -c texindex.c
- clean : main
- rm *.o
|
Et voici le résultat :
Code :
- Chargement de la liste de mots
- Chargement de : indexv[0] : tex
- Chargement de : indexv[1] : latex
- Chargement de : indexv[2] : miktex
- Chargement de : indexv[3] : jadetex
- Chargement de : indexv[4] : pstricks
- Vérification : 5
- Vérification : indexv[0] : pstr q@¼
- Vérification : indexv[1] : pstr q@¼
- Vérification : indexv[2] : pstr q@¼
- Vérification : indexv[3] : pstr q@¼
- Vérification : indexv[4] : pstr q@¼
|
Une idée ??
Merci ! |