stdin に向けられたファイルから読み取り、ファイル内で最もよく使用される 2 つの単語を見つけるプログラムを作成しようとしています。ほとんどすべてが正しく機能していましたが、while ループで奇妙なセグメンテーション エラーが発生しています
char *word=readWord();
int end=0;
while(end==0&&word!=NULL){
printf("word readn %s\n",word);
list=addToList(list,word);
printf("added to list\n");
word=readWord();
if(word==NULL){
end=1;
printf("word is null\n");
}
}
printf("done while loop");
one two three fourという単語を含むファイルを使用して実行すると、この出力は次のようになります。
単語を読んだ リストに追加 単語が2つ読める リストに追加 単語を読む 3 リストに追加 単語の読み方4つ> リストに追加 単語はヌルです セグメンテーション違反
readWord
関数は他のファイルで正常に動作します。
char * readWord(){
//temporary char array to read string
char c,word[BUFFER_SIZE];
if(scanf("%c",&c)==EOF){
return NULL;
}
while(!((c>='a'&&c<='z')||(c>='A'&&c<='Z'))){
if(scanf("%c",&c)==EOF)
return NULL;
}
int i;
for( i=0;(c>='a'&&c<='z')||(c>='A'&&c<='Z');i++){
word[i]=c;
scanf("%c",&c);
}
word[i+1]='\0';
//dynamic allocation of just enough memory to store the word
char * str= malloc(strlen(word) +1);
strcpy(str,word);
return str;
}