day4 标准IO读写:二进制方式

文章介绍了文本文件和二进制文件在存储格式上的区别,以及计算机内部如何用二进制表示文本。通过示例代码展示了使用fread和fwrite函数进行二进制文件的读写操作,包括结构体数据类型的存储。在文件操作中,需要注意文件指针的位置,读写完成后可能需要调整或重新打开文件。
摘要由CSDN通过智能技术生成

二进制读写概念

文本文件和二进制的区别:

存储的格式不同:文本文件只能存储文本。

计算机内码概念:文本符号只在计算机内部的编码(计算机内部只能存储数字010101001.。。。,所以所有符号都要编码)

二进制读写函数格式

size_t fread(void *ptr, size_t, size_t n, FILE *fp);

(从FILE *fp中读取,size_t size大小,size_t n 个个数,的内容所读取内容在void *ptr中。(或void *ptr指向所读取的内容))

void *ptr  ----- 读取内容放的位置指针;

size_t size ----- 读取的块大小;

size_t n ----- 读取的个数;

 FILE *fp ----- 读取的文件指针;

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);

void *ptr  ----- 写文件的内容的位置指针;

size_t size ----- 写的块大小;

size_t n  ----- 写的个数;

FILE *fp ----- 要写的文件指针;
 

注意事项:

文件写完后,文件指针指向文件末尾,如果这时候读,读不出来内容。

解决办法:

1、移动指针(后续说);

2、关闭文件,再次打开文件;


二进制文件读写代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student{
	char name[10];
	int age;
	char sex[8];
};


int main(int argc, const char *argv[])
{
	FILE *fp;
	size_t ret;
	struct student stu;
	struct student stu1;
	struct student stu2;

	fp = fopen("1.bin", "w");
	if (fp == NULL) {
		perror("fopen");
		return 0;
	}

	strcpy(stu1.name, "zhangsan");
	stu1.age = 21;
	strcpy(stu1.sex, "male");

	strcpy(stu2.name, "lisi");
	stu2.age = 22;
	strcpy(stu2.sex, "male");

	ret = fwrite(&stu, sizeof(stu), 2, fp);
	if (ret == -1) {
		perror("ferite");
		goto end;
	}else{
		printf("write struct student success\n");
	}

	fclose(fp);

	fp = fopen("1.bin", "r");
	if (fp == NULL) {
		perror("fopen");
		return 0;
	}

	ret = fread(&stu, sizeof(stu), 2, fp);
	if (ret == -1) {
		perror("fread");
		goto end;
	}else{
		printf("name:%s age:%d sex:%s\n", stu1.name, stu1.age, stu1.sex);
		printf("name:%s age:%d sex:%s\n", stu2.name, stu2.age, stu2.sex);
	}




end:
	fclose(fp);




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值