我正在尝试使用 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/