鱼C论坛

 找回密码
 立即注册
查看: 148|回复: 5

[已解决]零基础书中第八章关于read()的问题

[复制链接]
发表于 2020-11-17 01:35:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
8.14 文件的读取和定位
里面说read()是以字节为单位读取的,结果我看了下面关于定位的例子,发现read(5),但是定位到了9。
我再结合表8-2里面对read()方法的描述,是不是觉得书印错了,read()应该是以字符为单位读取的。
求助各位大神啊。
最佳答案
2020-11-17 10:19:52
以二进制模式打开文件,则read(n)是按字节数n读取,以文本模式打开则是按字符数n读取。
1201bb29564a973e8b7ce4369486541.jpg
f0d642da1fea75ef97cb921101afa6a.jpg
0540b38c91428d25c52a0e91e568384.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-11-17 01:45:42 | 显示全部楼层
可能老师说的是rb模式下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-11-17 08:19:00 | 显示全部楼层
本帖最后由 heidern0612 于 2020-11-17 08:25 编辑

read是以字节为单位读取的,但是众所周知一个汉字是按2个字符算的。

这就导致当你read一个汉字的时候,你没法read到单数字节的情况。

所以大概是为了统一这种规范,read的情况下,一个汉字也算一个字符或字节。

但tell的情况下,就能看到,一个汉字还是2个字节。

所以这里read其实应该总结为每次读取指定字节或字符比较合适。

以上纯属个人见解,胡说八道请见谅。



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-11-17 09:13:52 | 显示全部楼层
这个不难理解啊,一个是字符一个是字节。1个中文汉字、中文标点(全角标点)和全角字母数字是1个字符、2个字节
read(x)读取的是x个字符,tell()和seek()是字节
f.read(5) 结果是‘小客服:小’,你算算,小客服小,4个汉字,就是8个字符,英文的冒号,是1个字符
所以f.tell()返回9不是正常的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-11-17 10:19:52 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
以二进制模式打开文件,则read(n)是按字节数n读取,以文本模式打开则是按字符数n读取。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2020-11-17 17:50:34 | 显示全部楼层
笨鸟学飞 发表于 2020-11-17 09:13
这个不难理解啊,一个是字符一个是字节。1个中文汉字、中文标点(全角标点)和全角字母数字是1个字符、2个 ...

我的问题不在tell返回9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2020-11-30 12:06

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表