1.fread()函数
函数原型:size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream );
第一个参数是要输入的对象的指针
第二个参数是每个对象的大小(字节为单位)
第三个参数是要读取的对象个数
函数功能:从给定输入流stream读取最多count个对象到数组buffer中
返回值:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
2.fwrite()函数
函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
第一个参数是要被读取对象的指针
第二个参数是每个对象的大小
第三哥参数是读取对象的个数
函数功能:把ptr所指向的数组中的数据写入到给定流stream中。
返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。
#include
struct inf {
char name[12];
char high[5];
char weight[5];
};
int main()
{
FILE *fl=fopen("test.txt","a+b");
struct inf Xiaoming={"Xiaoming","185","80"};//初始化
fwrite(&Xiaoming,sizeof(struct inf),1,fl);
return 0;
}
运行结果:
Xiaoming 185 80
但是如果将high、weight类型更改为double 则在文件中显示的是乱码
如下:
#include
struct inf {
char name[12];
double high;
double weight;
};
int main()
{
FILE *fl=fopen("test.txt","wb");
struct inf copy,Xiaoming={"Xiaoming",185,80};//初始化
fwrite(&Xiaoming,sizeof(struct inf),1,fl);
fclose(fl);
return 0;
}
最后打开txt文本:
Xiaoming 烫烫 g@ T@
这是为什么呢?
fread()函数和fwrite()函数要使用二进制文件,虽然结构中有些内容是文本,但是成员high和weigh不是文本,如果用文本编辑器查看,会有文本部分显示正常,但是数值部分的内容不可读,甚至会导致文本编辑器出现乱码。
当然,再将乱码读入显示出来,却是正常的。
#include
struct inf {
char name[12];
double high;
double weight;
};
int main()
{
FILE *fl=fopen("test.txt","r+b"); //上一个程序是w+b 以这种方式读出依旧是乱码因为w模式不允许读
struct inf copy,Xiaoming={"Xiaoming",185,80};//初始化
fwrite(&Xiaoming,sizeof(struct inf),1,fl);
rewind(fl); //回退文件头
fread(©,sizeof(struct inf),1,fl);
printf("%s%lf%lf",copy.name,copy.high,copy.weight);
return 0;
}
运行结果:
Xiaoming185.00000080.000000