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.