2013-07-01 2 views
1

문자열 길이가 올바른 길이가 아니므로 나머지 프로그램이 작동하지 않습니다. 나는 한 줄에 62자를 읽고 다른 한 줄에 62자를 인쇄하려고한다.은 초기화되지 않은 문자 배열을 전달합니다. 크래킹

누구든지 출력 배열 함수에 char 배열을 올바르게 전달할 수 있습니까?

가 EOF 플래그가 후 때까지 설정되지
while (!feof(getty)) { ... } 

입력 작업이 실패 :

#include <stdio.h> 
#include <string.h> 

#define _CRT_SECURE_NO_DEPRECATE 

void output(char *wbuf, char *lbuf, int lineLength); 
void readFile(FILE *getty, char *wbuf, char *lbuf); 

FILE *getty; 

int main(void) { 
    char wbuf[1000] = {0}, lbuf[1000] = {0}; 

    if (fopen_s(&getty,"getty.txt", "r") != 0) 
    { 
     printf("Failed to open getty.txt for reading."); 
    } else { 
     readFile(getty, wbuf, lbuf); 
    } 

    fclose(getty); 
    return 0; 
} 

void readFile(FILE *getty, char *wbuf, char *lbuf) 
{ 
    static int lineLength = 62; 
    while (!feof(getty)) 
    { 
     fscanf(getty, "%s", wbuf); 
     output(wbuf, lbuf, lineLength);  
    } 
} 

void output(char *wbuf, char *lbuf, int lineLength) 
{ 
    int wbufLength, lbufLength, i = 0; 

    wbufLength = strlen(wbuf); 
    lbufLength = strlen(lbuf); 
    //prints incorrect 
    printf("wbuflength %d lbuflength %d\n", wbufLength, lbufLength); 
    // lengths 
    if ((wbufLength + lbufLength) <= lineLength) 
    {     
     strcat(lbuf,wbuf); //lbuf should be 0 but it starts at 
    }      //274, wbuf not correct either 
    else 
    { 
     strcat(lbuf,"\n"); 
     lineLength += 62; 
     strcat(lbuf, wbuf); 
    } 
} 
+2

'feof'는 아마 당신이 생각하는 것처럼 작동하지 않습니다. –

+5

Pro-tip : feof가 false를 반환하는 동안 반복하지 마십시오. I/O 작업 후 * EOF 플래그가 설정 될 때까지 설정되지 않습니다. –

+0

또한 파일에서 * line *을 얻으려면 항상 ['fgets'] (http://en.cppreference.com/w/c/io/fgets)가 있습니다. –

답변

0

문제는 루프의 조건이다.

루프가 반복되고 파일의 끝에 있기 때문에 루프가 반복되고 fscanf 작업이 실패하지만 루프 내부에서 루프를 확인하지 않고 파일에서 아무것도 읽지 않았더라도 output을 호출합니다 . 그런 다음 루프가 계속되고 다음 파일이 EOF에 도달했음을 알립니다.

+0

입력 루프는 입력 함수 ('fscanf')에 의해 반환 된 결과를 확인해야합니다. 'feof' 함수는 거의 유용하지 않습니다; 사실 이후에 왜 입력을 다 떨어지는 지 당신에게 말할 수 있습니다. 추천 도서 : [comp.lang.c FAQ] 12 장 (http://www.c-faq.com/). –

관련 문제