2016-10-20 6 views
-2

stdlib.h 헤더를 사용하여 C++로 파일을 읽는 데 몇 가지 문제가 있습니다. 제 문법의 실수를 바로 잡으십시오. 컴파일러는 'FILE에는 buffer, curp, fd 및 flags라는 멤버가 없습니다.'그게 무슨 뜻입니까?stdlib.h로 파일 읽기 C++

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

int main(){ 
    FILE *fp; 

    if ((fp = fopen("text.txt", "w"))==NULL){ 
     printf("error!"); 
     exit(1); 
    } 

    fputs("ABCDE\n", fp); 
    printf("file address : %p\n", fp->buffer); 
    printf("file size : %d byte \n", fp->bsize); 
    printf("file position : %p\n", fp->curp); 
    printf("file contents : "); 

    for (int i = 0; i <= 4; i++){ 
     printf("%c", *(fp->buffer+i)); 
    } 

    printf("\n"); 
    printf("file identity is unknown : %d\n", fp->fd); 
    printf("file status : \n"); 

    if ((fp->flags & 1)==1) printf ("readonly\n"); 
    if ((fp->flags & 2)==2) printf ("writeonly\n"); 
    if ((fp->flags & 3)==3) printf ("read/write\n"); 
    if ((fp->flags & 8)==8) printf ("file line\n"); 
    if ((fp->flags & 16)==16) printf ("error\n"); 
    if ((fp->flags & 32)==32) printf ("end of the file\n"); 
    if ((fp->flags & 64)==64) printf ("binary file\n"); else printf ("file text\n"); 
    if ((fp->flags & 128)==128) printf ("data from file\n"); 
    if ((fp->flags & 256)==256) printf ("data from file\n"); 
    if ((fp->flags & 512)==512) printf ("file is in the terminal\n"); else printf("file is in the disk"); 

    fclose(fp); 
} 
+0

축하합니다! –

+0

무엇을 의미합니까? –

+0

_ " 'FILE에는 회원이 없습니다 ...'"_ 완전한 축 어적으로 문자를 제공해주십시오! (질문에) –

답변

1

FILE은 불투명 한 타입이다. C 표준은 필드를 정의하지 않으므로 구현간에 다를 수 있습니다. 프로그램에서는 FILE 유형에 특정 이름의 필드를 포함 할 것으로 예상하지만 실제로 시스템에서는이를 정의하지 않습니다.

특정 필드가있는 FILE에 의존하지 말고 FILE*을 참조하여 해당 필드에 액세스하려고 시도하지 마십시오. 대신, C 표준 라이브러리에서 제공하는 함수 (예 : fread)를 사용하여 내용을 읽고 ftell과 같이 현재 위치를 얻습니다. 이 함수는 FILE* 매개 변수를 사용하고 프로그램이 실행되는 시스템에 맞는 모든 방법으로 내용에 액세스합니다.