c - 读取二进制文件时如何分别对每个结构体字段使用 fread() ?

标签 c struct binaryfiles

在我的结构中,我有字段

struct records {
    short link; 
    double gate; 
    unsigned char bar;
    int rest; 
    char rink; 
};

在我的main()

int main(int argc, char* argv[]){
    struct records rec;

    if(argc<2){//no paramaters
        //return error
    }

    FILE *fp=fopen(argv[1], "rb");

    if(fp==NULL){//no file
         //return error
    }

    //use fread() for each field in struct separately.   

    fclose(fp);
    return 0;
}

如何调用 fread() 以便它分别读取每个 struct 字段,然后将它们打印出来?我知道(每个类似的问题和网上的评论)显示通过提供整个struct来调用fread(),但我不想这样做,例如。 fread(&rec, sizeof(rec), 1, fp)。我想使用自己的 fread() 调用单独读取每个字段。感谢任何帮助,谢谢。

最佳答案

fread 需要两个重要的参数:指针和长度。

您可以轻松获得两者:

struct records {
    short link; 
    double gate; 
    unsigned char bar;
    int rest; 
    char rink; 
};

int main(int argc, char* argv[]){
    struct records rec;

    // ...

    FILE *fp=fopen(argv[1], "rb");

    // ...

    //use fread() for each field in struct separately.   

    while (!feof(fp))
    {
        if (fread(&rec.link, sizeof(rec.link), 1, fp) != 1
           || fread(&rec.gate, sizeof(rec.gate), 1, fp) != 1
           || // etc...
           )
        {
            // error !
        }
        // print the contents of rec, for example...
    }
    // ...
}

关于c - 读取二进制文件时如何分别对每个结构体字段使用 fread() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656978/

相关文章:

c - 通过 C 中的标准输入读取大型列表

c - 一种奇怪的函数定义方式

C 编程石头剪刀布不起作用

使用系统调用在 C 中复制文件并将其转换为二进制文件

linux - 共享 Linux 二进制文件

c - 错误: invalid operands to binary + (have ‘int *’ and ‘int *’ )

c - c中的 "struct <name_1> <name_2>"是什么?

go - struct{} 和 struct{}{} 在 Go 中如何工作?

c++ - 对包含指针的结构进行 Qsort

python:二进制文件的正则表达式搜索模式(半字节)