###ファイルから単語を読み取ってそれぞれの単語が何個あるかカウントするプログラム
発生している問題・エラーメッセージ
Segmentation fault: 11
↓このときそれぞれの配列の前に&をつけるようwarningが出てくるが参考書やネットで調べても&がいるとは書いていない strcmp(newWord[i], WORDlist[i]) strcpy(newWord[i], WORDlist[i])
C言語
1//Display characert frequents in a file(test.txt) 2#include <stdio.h> 3#include <strings.h> 4#define LIST_MAX 1000 5#define SENTENCE_MAX 1000 6int main(){ 7 int i, WORDcount [LIST_MAX]; 8 char ch, WORDlist [LIST_MAX], newWord[SENTENCE_MAX]; 9 FILE *fp; //ファイルポインタの作成 10 fp = fopen("text.txt", "r"); 11 12 for(i=0; i<LIST_MAX; i++){ 13 WORDcount[i]=0;//0からスタート 14 WORDlist[i]=0;//default character 15 } 16 17 do{ 18 ch=fgetc(fp);//ファイルから一文字読み取る 19 for(i=0; (( ch!=32 ) && ( ch!=EOF )); i++){ 20 if(strcmp(newWord[i], WORDlist[i]) == 0) 21 //スペースがくるまで 22 break; 23 } 24 if(WORDcount[i]>0){ //WORDリストに取ってきた文字があった場合 25 ++i; 26 }else{ 27 ++i; //0→1 strcpy 28 strcpy(WORDlist[i], newWord[i]);//WORDlistに登録 文字列なので =で代入できない 29 } 30 }while((ch != EOF)); 31 32 for(i=0; (( ch!='\0' ) && ( ch!=EOF )); i++){ //文字列の最後に含まれている\0 33 printf("%c = %d\n", WORDlist[i], WORDcount[i]); 34 } 35 fclose(fp); 36} 37 38
試したこと
最初に用意しておく配列の長さが短いのかと思い要素数を増やした
ターミナルで実行
ファイルからfgetcでスペースがくるまで(ASCIIコードで32)文字を読み取り、スペースがきたら読み取った単語(newWordという配列にある)がWORDlistという配列にすでに含まれているかをstrcmpで比べる。
あった→WORDcountのiの値に1を足す
なかった→WORDcountのiを0から1にする
newWordの配列にある読み取った単語をWORDlistの配列にstrcpyを用いてコピーする

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。