C语言 使用文件读取函数--fread/fopen出现的问题现象以及对应原因

C语言  使用文件读取函数--fread/fopen出现的问题现象以及对应原因

        使用场景:尝试读取png格式的文件

        问题所在:fread未能读取到所需要长度的字符串,fopen设置读取模式错误

        解决方式:调整fopen读取文件的模式

引发问题的原因:windows 系统中,fread 遇到 ”\r\n“的情况,将会替换为 '\n', 对比发现所需读取的部分存在”\r\n“的情况。

出现问题时,使用默认的读取方式——文本文件

更正为二进制文件读取方式,则纠正问题

#if 0 // 
	m_pngFp = fopen(fileName.c_str() , "r");
#else
	m_pngFp = fopen(fileName.c_str(), "rb");
#endif

读取目标:

{ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };

前后现象:

文本方式

 二进制方式

两种方式读取对比,发现使用文本方式读取将‘\r\n’(0x0d,0x0a)仅读出‘\n’(0x0a);

fopen函数相关描述:

二进制和文本模式的区别

1.在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。

2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别

参考连接:

C语言fopen函数的用法,C语言打开文件详解 - C语言中文网

C 库函数 – fopen() | 菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

究极囤囤鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值