fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer
用于接收数据的内存地址
size
要读的每个数据项的字节数,单位是字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流
返回值
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
你写入文本文件后,数据是用ASCII码串的形式来表示,已经不是二进制数据了,因此需要用fscanf函数来读取,试试如下程序:
#include
#include
struct hj
{
char dianh[10];
long int x;
long int y;
char gaoc[10];
}
main()
{
int i;
struct hj d[10];
FILE *fp;
char s1[10];
fp=fopen("123.txt","r+");
for(i=0;i<2;i++)
{
fscanf(fp,"%s\t%d\t%d\t%s %s",&d[i].dianh,&d[i].x,&d[i].y,&d[i].gaoc,&s1);
strcat(d[i].gaoc,s1);
}
fclose(fp);
}
fread是用二进制方式读取二进制文件,读取的数据必须是用对应的fwrite写入的,而你读取的是文本格式的文件当然就不行了!
你可以试试用fscanf读取。
读取字节出错了 应该是28字节 而不是20 最好用siezof(struct hj)
不要你手动输入数据 最好用程序将数据整块写入文本中 要吗你就用fscanf 和fsprintf对应着来
fread(&d[i],20,1,fp);这句不是读的
比如 freed(p,20,1,fp) p是一个已经分配的空间的指针 fread(d[j].dianh,10,1,lp);
freed(d[j].gaoc,10,1,lp);