Segmentierungsfehler (Core Dumped) wird von stdin gelesen

Ich versuche, die Anzahl jedes Wortes in einer Datei zu zählen. Die Datei kann entweder stdin oder ein in der Befehlszeile angegebener Dateiname sein (./count -f). Bisher liefert das Programm die richtigen Ausgaben, wenn eine Datei von der Kommandozeile gelesen wird. Aber ein Fehler tritt auf, wenn ich versuche, von stdin zu lesen. Das Programm gibt zuerst den korrekten Wert aus und gibt dann einen Segmentierungsfehler aus (Core Dumped). Hier ist ein Teil meines Codes.

    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," !\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~\n\t");
    while (word != NULL)
    {
        get_word(word); // get each word
        word = strtok (NULL, " !\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~\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-Funktion:

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

}

Bitte helfen Sie mir herauszufinden, warum ich einen Segmentierungsfehler bekomme (Core Dumped). Das Programm funktioniert auf meinem Mac, unter Linux jedoch nicht.
Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage