私は、一連の単語であるファイルを読み込み、文章をで分割し、トークンを配列に入れてstrtok()
で区切ります。次に、内容が正しいかどうかを確認するためだけに配列を印刷します。
ただし、出力が正しく出力されません。
ここに私のコードです。C - ファイルを読み込んでstrtokで配列に分割する
#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;
}
:
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
素晴らしいではありません。 しかし、私はそれを微調整場合ので、strが、それがうまくいくと、出力が
0: I0001
1: Meat Pie
2: Yummy Beef in Gravy surrounded by pastry
3: 3.50
4: 50
あるしかし、私の割り当てのために、私はmalloc()
を使用する必要がありますchar str[80];
静的です。 何が問題になりますか?
最初の 'のchar *トークン=はstrtok(STR 、 "|");は 'str'の前にデータがあります。 –
配列インデックスが0から始まり、 'tokenArray'の最大有効インデックスが99であるため、 'for(i = 1; i <200; i ++)'も心配です。 –
各行を読み上げると、前の行あなたが保存したポインタは、もはやあなたが想像するトークンを指していません。それぞれのトークンに対してメモリーを割り当ててコピーする必要があります。 –