2016-11-04 13 views
0

그래서 한 문자 씩 파일에서 배열로 읽으려고합니다. 내가 오류를 받고 있어요fille에서 char 배열로 읽는 C 언어

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

int main() 
{ 
    FILE * fp; 
    char abc[255]; 
    int i = 0; 

    fp = fopen ("source.c", "r"); 

    while(fgetc(fp) != EOF) 
    { 
     fputc(abc[i], FILE *fp); 
     printf("%c", abc[i]); 
     i++; 

    } 

    fclose(fp); 



    return(0); 
} 

:

main.c: In function 'main': 
main.c:19:19: error: expected expression before 'FILE' 
    fputc(abc[i], FILE *fp); 

이 오류가 무엇을 의미합니까 여기 내 코드는? 무엇이 잘못되었으며 어떻게 수정합니까?

+0

int fputc (int character, FILE * stream); (당신의 경우 fputc (abc [i], fp);) –

+0

'c'에서 인자 타입을 함수 인자로 넘겨주지 않으면'fputc' 호출에서'FILE *'을 제거하십시오. 그러나 그 전체 라인은 문제입니다. 'fputc'는 스트림에 문자를 _write하려고 시도합니다.이 파일은' "r"'모드로 읽기 전용으로 열었습니다. 답에서 알 수 있듯이'fputc' 라인을 완전히 버리십시오. 파일에 무언가를 쓰려고한다면, 쓰기 위해 열어야합니다. – yano

+0

이 줄 :'while (fgetc (fp)! = EOF)'는 파일에서 문자를 읽고 아무데도 저장하지 않습니다. 제안 :'char abc [255]; int ch; for (i = 0; i <255 && (ch = fgetc (fp)! = EOF)); i ++) {abc [i] = (char) ch; }' – user3629249

답변

2

오류는 fputc()의 잘못된 사용과 관련됩니다. 두 번째 인수는 스트림입니다. 그러나 귀하의 경우 printf()를 사용하고 있으므로 fputc()에 대한 호출이 필요하지 않습니다.

다른 문제가 있습니다. 파일에서 읽은 char은 저장하지 않습니다.

int in; 

    while((in=fgetc(fp)) != EOF) 
    { 
     in = abc[i]; 
     printf("%c", abc[i]); 
     i++; 
    } 

몇 가지 일반적인 의견 : 뭔가를 할

  • 항상 모든 표준 기능 오류 검사를 수행. fopen()에 오류가 발생하면 어떻게해야합니까?
  • 배열의 문자 수는 최대 256 자입니다. 파일 source.c에 문자가 더 있으면 어떻게 될까요?
0
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE * fp; 
    char abc[255]; 
    int i = 0; 

    fp = fopen ("source.c", "r"); 

    // we need to make sure that we can fit 
    // into buffer - that's why we check whether i < 255 
    while(i<255 && (abc[i] = fgetc(fp)) != EOF) 
    { 
    printf("%c", abc[i]); 
    i++; 
    } 
    // if we are way before end of the buffer 
    // we should think about terminating string 
    if(i<254) 
    abc[i] = '\0'; 
    else 
    // otherwise, we have to make sure that last character 
    // in buffer is zero 
    abc[254] = '\0'; 
    printf("%s", abc); 

    fclose(fp); 

    return(0); 
} 
+0

이제 작동합니다. 그러나이 부분은 무엇입니까? if (i <254) abc [i] = '\ 0'; else abc [254] = '\ 0'; printf ("% s", abc); – LakyJ

+0

C에서 문자열 (문자 배열)이 '\ 0'(문자열의 끝)로 끝나야합니다. 이 경우 우리에게는 두 가지 상황이 있습니다. 버퍼가 배열에 들어가고 마지막 위치에 '\ 0'을 넣어야합니다. 그렇지 않으면 마지막 문자를 덮어 쓰고 마지막에 '\ 0'을 넣습니다. – mko