我正在嘗試計算文件中每個字的數量。該文件可以是stdin或命令行中提供的文件名(./ count -f)。到目前爲止,程序在從命令行讀取文件時會提供正確的輸出。但是當我試圖從標準輸入讀取時發生錯誤。程序首先輸出正確,然後給出分段錯誤(核心轉儲)。這是我的代碼的一部分。從標準輸入讀取的分段錯誤(核心轉儲)
FILE * fp;
int size = 20000;
char sentence[2000]; // the sentence from stdin
if (argc != 3)
{
fgets(sentence,sizeof(sentence),stdin); // read from stdin
fflush(stdin);
// I think the initialization of word is incorrect, but i do know why it is incorrect
char *word = strtok (sentence," !\"#$%&'()*+,./:;<=>[email protected][\\]^_`{|}~\n\t");
while (word != NULL)
{
get_word(word); // get each word
word = strtok (NULL, " !\"#$%&'()*+,./:;<=>[email protected][\\]^_`{|}~\n\t");
}
}
else
{
fp = fopen(argv[2], "r");
if (fp == 0)
{
printf("Could not open file\n");
}
char word[1000];
while (readFile(fp, word, size)) { // let the program read the file
get_word(word); // get each word. Works well.
}
}
get_word功能:
void get_word(char *word){
node *ptr = NULL;
node *last = NULL;
if(first == NULL){
first = add_to_list(word); // add to linked list
return;
}
ptr = first;
while(ptr != NULL){
if(strcmp(word, ptr->str) == 0){
++ptr->freq;
return;
}
last = ptr;
ptr = ptr->next;
}
last->next = add_to_list(word); // add to linked list
}
請幫我弄清楚,爲什麼我得到一個分段錯誤(核心轉儲)。該程序適用於我的Mac,但不適用於Linux。
在此先感謝。
'fflush(stdin)'觸發未定義的行爲。 get_word是做什麼的? – cnicutar 2013-04-09 19:07:20
這不是根本原因,但你不應該調用'fflush(stdin);' - 輸入流中未定義fflush。 – Joe 2013-04-09 19:07:49
不,它不是fflush(stdin)問題。我刪除它,但仍然得到錯誤。我認爲這是一個記憶問題。該程序適用於我的Mac,但不適用於Linux。 – user605947 2013-04-09 19:11:22