C语言读写文件

使用C语言,将一个带0x00的字符串写入txt文件中,然后读出并打印。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
	char table[20]={'t','e','s','t','m','s','g',0x00,'a','b',
			'c','d','e','f','g','h','u','j','k','l'};
	int i;
	char *buf;
	FILE* file; 
	/*write*/
	file=fopen("E:\\c\\readTxt\\test.txt","wb");
	if(file == NULL){
		printf("open file fail\r\n");
		return -1;
	}
	for(i=0;i < 20;i++){
		fprintf(file,"%c",table[i]);
	}
	fclose(file);
	/*read*/
	file=fopen("E:\\c\\readTxt\\test.txt","rb");
	if(file == NULL){
		printf("open file fail\r\n");
		return -1;
	}
	buf = (char*)malloc(50*sizeof(char));
	for(i=0;i < 50;i++){
		*(buf+i) = '\0';
	}
	fread(buf,50,1,file);
	printf("read file data:\r\n");
	for(i=0;i < 50;i++){
		printf("%c",*(buf+i));
	}
	fclose(file);
	getchar(); 
	return 0;
}

在这里插入图片描述

需要注意的是,当数据包含0x00的时候,不能将其当成一个字符串,用strlen()计算长度,或是printf()打印的时候,使用%s。由于字符串在遇到0x00的时候会直接截断,把数据直接作为字符串处理,数据到0x00处就没有了。printf()输出的时候,就没有0x00后面的数据了。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
	char table[20]={'t','e','s','t','m','s','g',0x00,'a','b',
			'c','d','e','f','g','h','u','j','k','l'};
	int i;
	char *buf;
	FILE* file; 
	/*write*/
	file=fopen("E:\\c\\readTxt\\test.txt","wb");
	if(file == NULL){
		printf("open file fail\r\n");
		return -1;
	}
	for(i=0;i < 20;i++){
		fprintf(file,"%c",table[i]);
	}
	fclose(file);
	/*read*/
	file=fopen("E:\\c\\readTxt\\test.txt","rb");
	if(file == NULL){
		printf("open file fail\r\n");
		return -1;
	}
	buf = (char*)malloc(50*sizeof(char));
	for(i=0;i < 50;i++){
		*(buf+i) = '\0';
	}
	fread(buf,50,1,file);
	printf("read file data:\r\n");
//	for(i=0;i < 50;i++){
//		printf("%c",*(buf+i));
//	}
	printf("%s\r\n",buf); 
	fclose(file);
	getchar(); 
	return 0;
}

程序的输出会变成这样
在这里插入图片描述0x00后面的字符就不会输出了,因为程序识别到0x00,就判断字符串结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值