2016-10-20 8 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*を参照してこれらのフィールドにアクセスしようとしないでください。その代わりに、コンテンツを読むにはfread、現在位置を取得するにはftellなど、C標準ライブラリによって提供される関数を使用してください。これらの関数は、FILE*パラメータを受け取り、プログラムが実行されているシステムに適した方法でその内容にアクセスします。