3

我正在尝试创建一个程序,让用户输入单词,然后程序在文件中搜索输入的单词。我相信在我的程序中发生的事情是,当我输入单词时,它不会从我输入的 char 数组的 0 开始

#include <stdio.h>
#include <stdlib.h>



int main(int argc, char const *argv[])
{
int num =0;
char word[2000];
char *string;

FILE *in_file = fopen("words.txt", "r");
//FILE *out_file = fopen("output.txt", "w");

if (in_file == NULL)
{
    printf("Error file missing\n");
    exit(-1);
}

while(word[0]!= '0')
{
    printf("please enter a word(enter 0 to end)\n");
    scanf("%s",word);

    while(!feof(in_file))
    {
        fscanf(in_file,"%s",string);
        if(!strcmp(string,word))//if match found
        num++;
    }
    printf("we found the word %s in the file %d times\n",word,num );
    num = 0;
}

return 0;
 } 

有人可以帮助我让它重新读取到正确的位置吗?那么当它去比较单词时它会正确吗?

4

1 回答 1

2

您忘记为char *string;. 您的程序尝试fscanf(in_file,"%s",string);在未保留的内存中写入导致未定义的行为,然后很可能会崩溃。

替换char *string;char string[ MAX_WORD_LENGTH ]

还有许多其他问题,例如您的搜索可能仅在第一次尝试时有效,因为您每次都在读取文件,一旦您点击 EOF,您将不再阅读。您应该在每次搜索时使用fseek将位置指示器设置为文件的开头。

fseek ( in_file, 0, SEEK_SET );

同样使用strstr而不是strcmp可能会产生更好的结果。

于 2013-03-19T21:46:44.523 回答