c - 使用 fread() 读取结构体

标签 c

我正在尝试使用 fread 将数据输入到此结构中,我已将此结构定义为这样的 header

    #ifndef__HEADER_H__
    #define__HEADER_H__
    struct input_par
    {
        char key[5];
        char key_node[5];
        char src_ip[15];
        char dst_ip[15];
        char src_port[5];
        char dst_port[5];
    };

    #endif

在我的主函数中,在文件 input_data 中我存储了此数据

       @822!822!172.28.6.137!172.28.6.110!5000!6000| 

对我来说@意味着数据的开始,|意味着这里有效数据的结束我想输入822到key,822到key_node,172.28.6.137到src_ip等等6000到dst_port,我无法出于测试目的这样做,我只是输入822到key。我是第一次使用 fread 请帮忙

    #include"file_header"
    #include <stdio.h>
    main()
    {
        int i;
        struct input_par input_par;
        FILE *fp;
        fopen("input_data","r");
        if(*fp == "@")
        {
            while(*fp!= "!")
            {
                for(i=0;i<5;i++)
                {
                    fread(&input_par.key, sizeof(input_par),1,fp);
                    printf("%d\n",input_par.key);
                }

            }
        }
        fclose(fp);
    }

最佳答案

嗯,您的代码中有一些错误。正如 @unaperson 指出的,这不是 FILE 的使用,并且 definitely you should learn about it .

如果您要读取文件中的每个字符,并将 @ 解释为分隔符,则可以使用 fgetc而不是 fread,它用于读取大块。请注意,fgetc 返回一个 int,以便能够检查文件结束错误条件(您无法再读取)。

您可以读取每个字段直到下一个分隔符,并将其存储在结构体的相应字段中。

关于c - 使用 fread() 读取结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974529/

相关文章:

c - 段错误 - 如何找出我的代码有什么问题? - C

无法将新创建的链表分配给另一个变量

使用 scanf 检查输入是否为 double?

c - 在 C 中实现通用交换宏

c - 从 cscope 数据库生成调用树

c - 扫描目录以查找 c 中的文件

c - pthread 并在 C 中递归调用 execvp

c++ - 默认堆栈大小

c - 在 for 循环中使用 scanf

c - 打算用Objective-C写操作系统