使用fread()来读取struct

时间:2011-05-12 07:11:13

标签: c

我正在尝试使用fread将数据输入到此结构中,我已将此结构定义为此类标题

    #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

在我的main函数中,在文件input_data中我存储了这个数据

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

对我来说@表示数据的开始和|意味着有效数据的结束在这里我想输入822到密钥,822到key_node,172.28.6.137到src_ip,依此类推到6000到dst_port,我无法为测试目的这样做我只是输入822键。我是第一次使用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);
    }

1 个答案:

答案 0 :(得分:0)

嗯,你的代码中有一些错误。正如@unaperson指出的那样,这不是使用FILE和definitely you should learn about it

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

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