使用stdlib.h c++读取文件

Read files with stdlib.h C++

本文关键字:读取 文件 c++ stdlib 使用      更新时间:2023-10-16

我有一些问题,读取文件与c++使用stdlib.h头。请纠正我语法上的错误。编译器说'FILE没有名为buffer, curp, fd和flags的成员',这是什么意思?

#include <stdio.h>
#include <stdlib.h>
int main(){
    FILE *fp;
    if ((fp = fopen("text.txt", "w"))==NULL){
        printf("error!");
        exit(1);
    }
    fputs("ABCDEn", fp);
    printf("file address : %pn", fp->buffer);
    printf("file size : %d byte n", fp->bsize);
    printf("file position : %pn", fp->curp);
    printf("file contents : ");
    for (int i = 0; i <= 4; i++){
        printf("%c", *(fp->buffer+i));
    }
    printf("n");
    printf("file identity is unknown : %dn", fp->fd);
    printf("file status : n");
    if ((fp->flags & 1)==1) printf ("readonlyn");
    if ((fp->flags & 2)==2) printf ("writeonlyn");
    if ((fp->flags & 3)==3) printf ("read/writen");
    if ((fp->flags & 8)==8) printf ("file linen");
    if ((fp->flags & 16)==16) printf ("errorn");
    if ((fp->flags & 32)==32) printf ("end of the filen");
    if ((fp->flags & 64)==64) printf ("binary filen"); else printf ("file textn");
    if ((fp->flags & 128)==128) printf ("data from filen");
    if ((fp->flags & 256)==256) printf ("data from filen");
    if ((fp->flags & 512)==512) printf ("file is in the terminaln"); else  printf("file is in the disk");
    fclose(fp);
}

FILE为不透明类型;C标准没有定义它的字段,因此它们在不同的实现之间可能会有所不同。您的程序期望FILE类型具有具有特定名称的字段,但是您的系统实际上并没有这样定义它。

不要依赖具有特定字段的FILE,也不要取消引用FILE*来尝试访问这些字段。相反,使用C标准库提供的函数,例如fread读取内容,ftell获取当前位置。这些函数接受一个FILE*参数,并以适合程序运行的系统的任何方式访问其内容。