Donc j'essaye de lire un fichier qui est une série de mots et de phrases séparés par |
et séparez-les par strtok()
en plaçant les jetons dans un tableau. Ensuite, imprimez le tableau juste pour vérifier si le contenu est correct.
Cependant, la sortie est incorrecte.
Voici mon code.C - lire le fichier et le scinder avec strtok dans un tableau
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char ** argv)
{
FILE *fp;
char *str=malloc(80*sizeof(char));
int count=0;
char *tokenArray[100];
int i=0;
int j=0;
char *token = strtok(str, "|");
printf("Loading stock...\n");
fp = fopen(argv[1], "r");
while(fgets(str, sizeof(str),fp)!=NULL){
tokenArray[0]=strtok(str,"|");
for(i=1; i<200; i++){
if((tokenArray[i]=strtok(NULL,"|")) ==NULL)
break;
}
count=i;
for(i=0; i<count;i++){
printf("%d: %s\n",i,tokenArray[i]);
}
}
return EXIT_SUCCESS;
}
Quels sont les résultats à la sortie:
Loading stock...
0: I0001
1: M
0: eat Pie
0: Yummy
0: Beef in
0: Gravy
0: surroun
0: ded by
0: pastry
0: 3.50
1: 50
0:
0: I0002
1: A
0: pple Pi
0: e
1: Delic
0: ious St
0: ewed Ap
0: ple in
0: a Yummy
0: Pastry
0: envelo
0: pe
1: 3.00
0: 20
Ce qui est pas grande. Toutefois, si je tweak si str est statique char str[80];
il fonctionne et la sortie est
0: I0001
1: Meat Pie
2: Yummy Beef in Gravy surrounded by pastry
3: 3.50
4: 50
Mais pour l'amour de ma mission, je doit utiliser malloc()
. Qu'est-ce qui ne va pas?
Le premier 'char * jeton = strtok (str , "|"); 'est avant que' str' ait des données. –
Ceci: 'for (i = 1; i <200; i ++)' est également inquiétant, puisque les index de tableau commencent à 0, et l'index maximum valide pour 'tokenArray' est 99. –
Comme vous lisez dans chaque ligne, vous écrasez la ligne précédente. Ainsi, les pointeurs que vous avez stockés ne pointent plus vers les jetons que vous imaginez. Vous devez allouer de la mémoire pour chaque token et le copier. –