ファイル内の各単語の数を数えようとしています。ファイルは、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," !\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~\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 関数:
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 では動作しません。
前もって感謝します。