求教一个关于 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位
...全文
996 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]
这个很有可能
源码下载地址: https://pan.quark.cn/s/572a538835a2 ### 关于VOC2012训练数据集的说明 #### 1. 数据集的基本介绍 VOC2012(Visual Object Classes 2012)是Pascal VOC挑战赛中的一个重要组成部分,该挑战赛被视为一种广泛应用的图像识别和物体检测基准数据集。VOC2012主要应用于衡量计算机视觉算法在对象分类、定位以及检测任务上的表现水平。它包含了大量经过标注的图像,这些图像涉及多个不同的类别,并且图像中的每一个对象都经过了细致的标记处理。 #### 2. 数据集的主要特性 - **丰富性**:VOC2012数据集收集了20个不同的类别,涵盖了诸如汽车、自行车、鸟类、猫科动物、椅子等常见的物体。 - **容量**:该数据集总共包含了约5000张用于训练的图像和约5000张用于验证的图像。 - **详细标注**:每张图像中的对象都经过了详尽的标注,包括对象的边界框和类别标识。 - **普遍适用性**:VOC2012被普遍应用于学术研究和工业应用中,作为衡量各种计算机视觉技术的标准参照之一。 #### 3. 数据集的组成成分 VOC2012数据集主要可以划分为以下几个部分: - **训练部分**:包括约2500张用于模型训练的图像。 - **验证部分**:包括约2500张用于调整模型参数的图像。 - **测试部分**:包括约4952张用于最终评估模型性能的图像。 - **标注文件**:每个图像都配备有一个XML文件,其中记录了图像中对象的位置信息和类别标签。 #### 4. 数据集的获取途径及使用方法 根据提供的信息,VOC2012训练数据集可以通过以下链接进行获取: - **获取...

70,040

社区成员

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

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