求教一个关于 ftell()函数返回值的问题,敬请高人指点。

mig_31_fox 2011-03-16 10:40:13
步骤:
1.自己先新建一个文本文档,命名为:Stu_list.txt. 内容为:abc
如下图所示:


2.编写完整程序,如下:

#inlcude <stdlib.h>
#include <stdio.h>

void main()
{
FILE *fp;
long len;
char *buf;

fp=fopen("stu_list.txt","rb");

fseek(fp,0,SEEK_END); //使stu_list.txt的文件指针移动到该文件的末尾。
len=ftell(fp); //使用ftell()函数,求得当前指针相对于stu_list.txt文件开头的位移量,赋值给len.
printf("%ld\n",len);
}

3.编译,运行。

4.得到的结果是: Len的值是5,而不是3.

我的问题是:既然ftell()函数的返回值是该文件指针在当前的读写位置偏离文件头部的字节数,stu_list的内容只有abc这三个字符,即三个字节。那么,为什么len的值是5呢?

敬请各位高人给予精确的指点,小弟在这里先谢谢各位了。

环境:
1.所用编译器:Visual C++ 6.0
2.操作系统:Windows XP 32位
...全文
991 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2011-03-16
  • 打赏
  • 举报
回复
我按照LZ的说法,实验的结果是3。
所以还请LZ检查文件先。
具体的检查方法是用WinHex或者UltraEdit的hex模式来看文件的真实内容。
赵4老师 2011-03-16
  • 打赏
  • 举报
回复
请使用WinHex软件
mig_31_fox 2011-03-16
  • 打赏
  • 举报
回复
回楼上的朋友们,我建立的这个 stu_list.txt 文件里面没有任何回车或者换行,我只是直接连续输入abc三个字符就保存。没有键入任何回车或者换行。
yuyan_linger 2011-03-16
  • 打赏
  • 举报
回复
我试过了 输出是3啊
你这里用的是Stu_list.txt还是stu_list.txt
是不是读错了?
我用vs05

Meteor_Code 2011-03-16
  • 打赏
  • 举报
回复
你是不是保存成了utf8文本啊,utf8文本在windows中前面会加个2字节标志好像是 ff fe
2011-03-16
  • 打赏
  • 举报
回复
有些文本编辑器喜欢在末尾自动加上一个换行符。你最好用支持 16 进制编辑的编辑器检查一下。
yuanwang1986 2011-03-16
  • 打赏
  • 举报
回复
也没有空格之类的吗
yuanwang1986 2011-03-16
  • 打赏
  • 举报
回复
在说这个5的问题,如果你stu_list.txt有两个回车换行,你是以rb方式读的话输出应该是7个,以r读是占5个。但如果你的stu_list.txt里面是1(空格)2(空格)3这样的,不管你是以rb或者r读都是5,因为空格也是占一个字节的,这里面没有换行操作
mig_31_fox 2011-03-16
  • 打赏
  • 举报
回复
回复楼上的yuanwang1986朋友,我在建立 stu_list.txt 时候,只是输入了abc三个字符,直接保存文件。没有键入回车键。所以,这个 stu_list.txt 文件,只有 abc 这三个字符,没有回车符,也没有换行符。
yuanwang1986 2011-03-16
  • 打赏
  • 举报
回复
你的图看不见,我估计是因为你读写的方式问题,就是说二进制文件跟文本文件是不同的,以rb读时一个换行(0D+0A)占两个字节,而以r读时碰到(0D+0A)自动转换为0A,只占一个字节,不知道我说的你能明白不,其实你只要弄清文本文件跟二进制文件的区别 这个问题就很容易想明白了
yuanwang1986 2011-03-16
  • 打赏
  • 举报
回复
建议你下载个UltraEdit,然后你文件里面有什么就一目了然了
mig_31_fox 2011-03-16
  • 打赏
  • 举报
回复
谢谢楼上的各位朋友,我会参照你们的指导,再试一试。
hxingz 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 meteor_code 的回复:]

你是不是保存成了utf8文本啊,utf8文本在windows中前面会加个2字节标志好像是 ff fe
[/Quote]
这个很有可能
这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【深度学习毕业设计】人脸识别 智能门禁系统(深度学习+OpenCV DNN+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 出入控制是安防体系中的基础环节。长期以来,IC 卡、密码键盘和门禁钥匙在企事业单位中广泛使用,但存在卡片易丢失、密码易泄露、冒用难追溯等问题。尤其在人员流动性较高的园区与写字楼场景中,卡片补办成本高,权限变更往往滞后,管理方难以及时掌握“谁在何时从何处进出”的完整信息。近年来,深度学习推动生物特征识别技术快速落地,人脸识别因采集成本低、通行体验好、可与视频监控联动,成为智能门禁的主流方案之一。 在智慧园区和数字化办公场景中,门禁系统不仅要完成“开门”,还要完成“管人、管设备、管权限、管记录、管告警”的闭环。将人脸识别与后台管理系统结合,能够把身份核验、权限策略和安全事件处理统一到同一平台,提升管理效率与安全水平。对组织管理者而言,系统可以支撑考勤辅助、访客管控与安全审计;对通行者而言,非接触式识别减少了掏卡刷卡的繁琐步骤,也降低了交叉接触风险。因此,研究并实现一套结构清晰、技术路线明确、可演示可扩展的带人脸识别智能门禁系统,具有明确的工程意义与教学价值。 本课题选择 OpenCV DNN、YuNet 与 SFace 作为识别技术路线,结合 Python、FastAPI 与 Vue3 完成系统开发。该方案无需依赖商业闭源 SDK,模型文件体积较小,部署门槛低,适合本科毕业设计在有限硬件条件下完成可运行原型,同时又能体现深度学习在实际工程中的应用方式。与单纯调用云端识别 API 相比,本地化推理更有利于保护人脸生物特征数据,也便于在论文中完整展示算法调用链路与系统设计细节。 从人才培养角度看,本课题横跨软件工程、数据库原

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧