Bonjour,
Je suis en train d'essayer de récupérer le contenu d'un fichier qui est structuré comme ceci:J'ai créé deux tableaux, un pour les mots et un autre pour les définitions. Pour le moment je rencontre deux problèmes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part mot:definition\n
- Je ne parviens pas à vider un char * avant d'écrire dedans
- Et j'ai un segmentation fault après un strncat (p-e lié au premier problème)
Pour le premier problème, j'ai essayé en placant comme premier caractère un \0. Evidemment, ça ne peut marcher puisque je fais un strcat après. Et j'ai essayé en copiant "" mais là, il n'aime pas non plus. Voici ce que me dit gdb:Si je ne vide pas les char *, j'ai des caractère bizarres avant et après mes mots. Quand je ne le fais pas, j'obtiens ceci:Program received signal SIGSEGV, Segmentation fault.
0x080485af in file2tables (dico=6, mots=0xbfea1e54, definitions=0xbfea1e2c) at serveur.c:45
45 strcpy(mots[i],"");
Voici mon code:Program received signal SIGSEGV, Segmentation fault.
0xb7e18de7 in strncat () from /lib/tls/i686/cmov/libc.so.6
J'ai une contrainte: utiliser les appels sytèmes: donc pas de fopen, fread, fgets,...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 void file2tables(int dico, char * mots[NB_MOTS], char * definitions[NB_MOTS]){ char lettre; int nbchar; int numMot = 0; int mot =1; //definition = 0 int i; //Vide les tableaux for (i =0; i<NB_MOTS;i++){ strcpy(mots[i],""); strcpy(definitions[i],""); // mots[i][0] = '\0'; //definitions[i][0] ='\0'; } do{ nbchar = read(dico,&lettre,1); if (nbchar == 1){ if (lettre == ':'){ mot = 0; } if (lettre == '\n'){ mot = 1; numMot ++; } if (mot){ if (lettre != '\n'){ strncat(mots[numMot],&lettre,1); } } else{ if (lettre != ':'){ strncat(definitions[numMot],&lettre,1); } } } }while(nbchar >0); for (i=0;i<NB_MOTS;i++) printf("Mot: %s \nDefinition: %s\n",mots[i],definitions[i]); }
Merci d'avance pour votre aide.
P.S: Je suis sur Ubuntu.
Partager