1.fwrite(二进制输出)
// size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
// const void* ptr:指向待被写数据的指针
// size_t size:待写数据的一个元素大小
// size_t count:待写数据的元素个数
// FILE* stream:指向待写文件的文件指针
// size_t fwrite(返回值):实际输出的元素个数,不一定等于count
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S
{
char name[20];
int age;
float score;
};
int main()
{
struct S s1 = { "zhangsan",24,93.5f };
//打开文件
FILE* pf = fopen("test.dat", "wb");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
fwrite(&s1, sizeof(struct S), 1, pf);
// fwrite是以二进制形式输出(写文件),所以文件打开之后会出现部分内容(准确来说是除了字符串以外的其他类型的内容,因为字符串以二进制形式存储和以文本形式存
// 储是一样的)不认识或者乱码,因为二进制形式存储和文本形式存储是截然不同的。为解决不认识二进制形式的输出内容这一问题,我们可以再以二进制形式读取(输入)这些内容
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
2.fread(二进制输入)
// size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
// void* ptr:指向用来存放读取到的数据的内存块的指针,该内存块至少可以存放count个元素
// size_t size:待读取数据的一个元素大小
// size_t count:待读取数据的元素个数
// FILE* stream:指向待读文件的文件指针
// size_t fread(返回值):fread实际读取到的元素个数,假如count参数是5,而fread实际读取到的元素个数是3,那么返回值就是3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S
{
char name[20];
int age;
float score;
};
int main()
{
struct S s2 = {0};
//打开文件
FILE* pf = fopen("test.dat", "rb");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
fread(&s2, sizeof(struct S), 1, pf);
// fread是以二进制形式输入(读文件),"test.dat"是文本文件,里边存放了二进制信息,二进制信息在文本文件中我们是看不懂的(除了字符内容,字符的
// 二进制形式和文本形式是一样的),fread可以读取到文本文件中的二进制信息
printf("%s %d %f\n", s2.name, s2.age, s2.score); //zhangsan 24 93.500000
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}