2013-03-19 7 views
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; 
} 

누군가가 나를 도울 수 정확한 위치? 그래서 그것이 단어를 비교하러 갈 때 그것은 그렇게 정확하게합니까?

+0

관련 : http://stackoverflow.com/q/15508828/509868 – anatolyg

답변

2

char *string;에 대한 메모리를 선언하는 것을 잊었습니다. 프로그램에서 예약되지 않은 메모리에 fscanf(in_file,"%s",string);을 쓰려고 시도하면 의 정의되지 않은 동작 인이 발생하고 충돌이 발생할 가능성이 큽니다.

이 많은 다른 문제는 당신이 때마다 파일을 읽는되기 때문에 검색이 첫 번째 시도에서 작동 할 수 있습니다 예를 들어, 그리고 당신이 EOF 공격 후에는 더 이상 읽지 않습니다 char string[ MAX_WORD_LENGTH ]

char *string;를 교체합니다. 모든 검색에서 위치 표시기를 파일의 시작 부분에 fseek으로 설정해야합니다.

fseek (in_file, 0, SEEK_SET); 

또한 더 나은 결과가 발생할 수 있습니다 strstr 대신을 strcmp 의를 사용하여.

+0

? 내 말은 프로그램이 한 단어를 올바르게 실행 한 다음 첫 단어 이후에 입력 된 모든 단어에 대해 0을 반환합니다.이 경우에도 내 질문에 대답하지 않는 충돌이 발생합니다. – undone98

+0

@ undone98, 충돌은 정의되지 않은 동작의 유일한 결과 일 수 없습니다. 이 문제는 귀하가 신고 할 수있는 증상에 대한 잠재적 인 원인 일 수 있으므로 해결하십시오. –

+0

fseek 제안이 도움을 주셨습니다. – undone98