一次读写一块字符(fread fwrite)

一次读写一块字符(fread fwrite) 文本操作:

#include "stdafx.h"


#if 0

----int fwrite(void *buffer, int num_bytes, int count, FILE *fp)
//把buffer指向的数据写入fp指向的文件中


//fread(起始地址,最小单元,读取个数,文件句柄)>0
----int fread(void *buffer, int num_bytes, int count, FILE *fp)
//把fp 指向的文件中的数据读到 buffer 中


buffer : 指向要输入/输出数据存储区的首地址的指针
num_bytes : 一次要读/写字节的大小
count : 要读/写几个num_bytes大小的数据(或者看成读/写几次)
fp : 要读/写的文件指针

成功,返回读/写的字段数(有几个num_bytes大小的数据(相当于Count));
出错或文件结束,返回 0。
返回值返回的为 相应大小的个数,不够相应大小则返回0
应注意返回值的陷阱 以最小的单元格式进行读, 或是写入的最小单元进行读。
将 num_bytes 的值设置小些 count 的值设置大些
fread((void*)buf, 1, 1024, fp)


fread fwrite 对特殊字符 特殊格式(\n \r \t等)不敏感 把它们只当作
普通字符 不会发生中断等情况

#endif



int _tmain(int argc, _TCHAR* argv[])
{
	//读取文本
	FILE* fp = fopen("bin.txt", "rb");
	
	//bin.txt:aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd

	if (NULL == fp)
		return -1;

	char buf[1024];

	//int n;
	//while ((n=fread((void*)buf, 1, 3, fp)) > 0)
	//{
	//	printf("n=%d  %c%c%c\n",n, buf[0], buf[1], buf[2]);
	//	//此时会多打印俩个d,因为每次fread后相当于将读取的值覆盖到buf中
	//	//最后一次只读到了一个d,但是只覆盖了buf中的buf[0],而buf[1]和buf[2]
	//	//还是上一次fread之后的值d,所以会多打印俩个d
	//}

	int n;
	while ((n = fread((void*)buf, 1, 3, fp)) > 0)
	{
		printf("n=%d\t", n);
		for (int i = 0; i < n; i++)
		{
			printf("%c\t", buf[i]);//相当于读到几个数据就打印几个
		}
		printf("\n");
	}
	return 0;
}

一次读写一块字符(fread fwrite) 二进制操作:

#include "stdafx.h"


#if 0

前面所学的所有的文件接口函数,要么以‘\0’,表示输入结束,
要么以‘\n’EOF(0xFF)表示读取结束。‘\0’‘\n’等都是文本
文件的重要标识,而二进制文件,则往往以块的形式,写入或读出

#endif


int _tmain(int argc, _TCHAR* argv[])
{
	int a[10] = { 0xFF, '\0', 0x0D, '\n', 11, 22, 33, 44, 55, 66 };

	FILE * fp = fopen("bin.txt", "wb+");
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);
	fwrite((void*)a, sizeof(a), 1, fp);

	rewind(fp);

	int buf[10];

	while (fread((void*)buf, sizeof(int[10]), 1, fp)>0)
	{
		for (int i = 0; i<10; i++)
		{
			printf("%x==", buf[i]);
		}
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值