2014-10-21 3 views
0

문자로 문자 파일을 읽고 문자로 뭔가를하고 단어로 무언가를하고 싶습니다. 이것은 내 구현입니다.fgetc을 사용하여 단어를 읽으시겠습니까?

char c; 
char* word=""; 
fp = fopen("text.txt","rt"); 
do 
{ 
    c = (char)fgetc(fp); 
    if(c == ' ' || c == '\n' || c == '\0' || c == '\t') 
    { 
     //wordfunction(word) 
     word = ""; //Reset word 
    } 
    else 
    { 
     strcat(word, &c); //Keeps track of current word 
    } 
    //characterfunction(c); 
}while(c != EOF); 

fclose(fp); 

그러나이 프로그램을 실행하려고하면 즉시 프로그램이 중단됩니다. 단어를 ''(으)로 설정하는 데 문제가 있습니까? 그렇다면 대신 무엇을해야합니까?

+0

'strcat와 (단어, &c);은'잘못은' ""'문자열을 바인딩 할 수있는 공간이 없습니다 '및 c'는 아니다 C_String 또한'C'는 EOF 모의 문자가 될 수 있습니다 – BLUEPIXY

+0

제안 사항은 무엇입니까? – user2154420

+0

[C의 입력 파일에서 문자로 문자 읽기] (http://stackoverflow.com/questions/19029852/reading-char-by- input-file-in-c) –

답변

1

변수 초기 할당에서 정적 길이가 0 인 문자열을 가리키고 있습니다. 거기에 데이터를 쓰려고하면 다른 것을 덮어 쓰게되고 프로그램이 중단됩니다. 대신 단어에 공간을 확보해야합니다. 당신이 당신의 단어를 100 개 문자의 공간을 만들 것 대신

char word[100]; 

char* word=""; 

사용이

. 코드가 덤프 있도록 strcat에 의해 작성 될 수 없습니다 일정한 지역에

char c; 
char word[100]; 
fp = fopen("text.txt","rt"); 
int index = 0; 
do { 
    c = (char)fgetc(fp); 
    if(c == ' ' || c == '\n' || c == '\0' || c == '\t') { 
    //wordfunction(word) 
    word[0] = 0; //Reset word 
    index = 0; 
    } else { 
    word[index++] = c; 
    word[index] = 0; 
    //strcat(word, &c); //Keeps track of current word 
    } 
    //characterfunction(c); 
} while(c != EOF); 

fclose(fp); 
+0

에 100 바이트를 할당 할 때마다 단어를 재설정 할 수 있습니까? – user2154420

+0

단어 '\ 0'으로 끝 단어가 정의됩니다. \ 0, as word [0] = 0; – Joao

+0

그 코드는 효과가 있었지만, 왜 word [0] = 0인지를 자세히 설명하는 코드; 원하는대로 문자열을 "재설정"했습니까? – user2154420

0
  1. word 점;
  2. word에는 문자를 예약 할 수있는 충분한 공간이 있어야하며 하드 코드 또는 realloc(word, size_t)을 사용해보십시오.

  3. 이이 gcc -o 컴파일 할 수 있습니다..

int main(){ char c; char word[1000] = {0}; //enough space FILE* fp = fopen("text.txt","rt"); int index = 0; assert(0 != fp); do { c = (char)fgetc(fp); if(c == ' ' || c == '\n' || c == '\0' || c == '\t') { //wordfunction(word) index = 0; } else { word[index++] = c; } //characterfunction(c); }while(c != EOF); word[index] = 0; fclose(fp); return 0; }

+1

너 r 코드에는 많은 실수가 있습니다. – BLUEPIXY

+0

코드에서 C++ 함수를 사용 했습니까? –

+0

죄송합니다. 내 실수 - 원래 댓글을 삭제하는 중입니다. –

관련 문제