【C语言】fread() | fwrite() 二进制读/写函数。

时间:2023-02-10 14:56:30

????write in front????   

????大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????

????2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~2022博客之星Top63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+????

????本文由 謓泽 原创 如需转载还请通知⚠

????个人主页-​謓泽51Ctop的博客​????

????欢迎各位→点赞???? + 收藏⭐️ + 留言????

????系列专栏-謓泽51Ctop的博客_【C语言】从0~1_51CTO博客????
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本????

【C语言】fread() | fwrite() 二进制读/写函数。

????????????fread()????fwrite()二进制读/写函数????????????

两个函数是以二进制当中去读取文件的分别是↓

  • ????fread???? →  二进制输入/读。
  • ????fwrite???? → 二进制输出/写。 

????fread() 函数声明方式如下↓

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );【C语言】fread() | fwrite() 二进制读/写函数。

从流中读取count元素数组,每个元素的大小为size字节,并将它们存储在ptr指定的内存块中。

流的位置指示器被读取的总字节数提前。

如果成功读取的总字节数是(size*count)。

  • 参数如下↓

ptr→指向内存块的指针,该内存块的大小至少为(size*count)字节,转换为void*类型。

size→要读取的每个元素的大小(以字节为单位)。Size_t是一个无符号整型类型。

count→元素的数量,每个元素的大小为字节大小。

stream指向指定输入流的FILE对象的指针。

  • 返回值如下↓

返回成功读取的元素总数。如果这个数字与count参数不同,则在读取时发生了读取错误或到达了文件结束符。在这两种情况下,都设置了合适的指示器,可以分别用ferror和feof检查。
如果size或count为零,则函数返回零,而流状态和ptr指向的内容都保持不变。

fwrite()实际上它两的参数值都一样,这里就不再说了↓

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );【C语言】fread() | fwrite() 二进制读/写函数。

不对,还是有不一样的,不知道你发现了没有 doge (o゚v゚)ノ 

????????????fwrite()????fread()代码示例????????????

fwrite() 代码示例如下↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct student
{
char name[20];//学生名字
char sex[5];//学生性别
char id[20];//学生学号
int age;//学生年龄
};
int main(void)
{
struct student s = {"张三","你好","嗯",886};
FILE* pf = fopen("test.txt", "w");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//写文件(二进制形式写)
fwrite(&s, sizeof(struct student), 1, pf);

//关闭文件
fclose(pf);
pf = NULL;
return 0;
}


【C语言】fread() | fwrite() 二进制读/写函数。

成功写入但是从上面图中可以看出会出现乱码,原因实际上就是它是以二进制形式写的。 这里字符串我们能看懂是因为二进制写进去和文本写进去的形式都是一样的。整数或者浮点数写进去的概念完全是不一样的。 

那么我们试试 ????fread()???? 到底能不能看的懂(´▽`ʃ♡ƪ)

fread() 代码示例如下↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct student
{
char name[20];//学生名字
char sex[5];//学生性别
char id[20];//学生学号
int age;//学生年龄
};
int main(void)
{
struct student s = { 0 };
FILE* pf = fopen("test.txt", "r");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//读文件
fread(&s, sizeof(struct student), 1, pf);
//打印
printf("%s %s %s %d\n", s.name, s.sex, s.id, s.age);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}


【C语言】fread() | fwrite() 二进制读/写函数。

从这里我们可以知道我们用 fread() 就 可以读懂了。好耶o(* ̄▽ ̄*)o】

张三:????‍好耶~,我:#########@%¥******