文本方式写文件'\n' 返回字符串长度问题

项目中需要写入一行字符串,后续要读出这行字符串并计算长度,不同的代码段计算的长度有时候差1,开始搞不明白是什么原因,后来终于排查出来,是因为文件打开方式的原因:

1、如果是以文本方式打开文件,写入文件时遇到‘\n’,会自动写入 0x0D 0x0A 两个字节,后续如果以文本方式打开读,'\n'会当做一个字节;以二进制方式打开读,'\n'会当做两个字节,strlen()返回的长度不一样,如下代码所示:

	fopen_s(&f1,"test.txt", "a");
	fprintf(f1,"test\n");
	fclose(f1);

	fopen_s(&f1,"test.txt", "r+");
	fgets(line, 260, f1);
	length = strlen(line);
	printf("r+  len:%d\n", length);
	fclose(f1);

	fopen_s(&f1,"test.txt", "rb+");
	fgets(line, 260, f1);
	length = strlen(line);
	printf("rb+  len:%d\n", length);
	fclose(f1);

文件如下:

 

运行结果如下:

2、如果是以二进制方式打开文件,写入文件时遇到‘\n’,会自动写入  0x0A 一个字节,不论以文本方式还是二进制方式打开读,'\n'都会当做一个字节,如下代码所示:

	fopen_s(&f1, "test.txt", "ab");
	fprintf(f1, "test\n");
	fclose(f1);

	fopen_s(&f1, "test.txt", "r+");
	fgets(line, 260, f1);
	length = strlen(line);
	printf("r+  len:%d\n", length);
	fclose(f1);

	fopen_s(&f1, "test.txt", "rb+");
	fgets(line, 260, f1);
	length = strlen(line);
	printf("rb+  len:%d\n", length);
	fclose(f1

文件如下:

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值