我正在嘗試編寫一個程序,該程序從定向到stdin的文件中讀取,然後在該文件中找到兩個最常用的單詞。我幾乎一切工作正常,但現在我有我的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");
奇分段錯誤從這個輸出是使用有句話一二三四個文件運行時,如下所示。
word readn one added to list word readn two added to list word readn three added to list word readn four> added to list word is null Segmentation fault
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;
}
可能需要''addtoList''和你的示例文件。 '因爲''單詞readn four>''這一行,如果不是拼寫錯誤,看起來與別人不同。 – gongzhitaao
'scanf(3)'返回匹配項的數量,與'EOF'相比毫無意義。推測你想用'c = getchar()'來讀取單個字符。 – vonbrand
@vonbrand它是有道理的。 http://www.cplusplus.com/reference/cstdio/scanf/說*如果讀取錯誤發生或在讀取時達到文件結束,則設置正確的指示符(feof或ferror)。而且,如果在任何數據可能成功讀取之前發生任何數據,則返回EOF。* – gongzhitaao