fscanf(fp,"%d",&x);该函数怎知每次读取多少字节长度的数据呢?是判断变量x的类型吗

 我来答
adoqq_bd
2012-05-24 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1628万
展开全部
fscanf()函数不会知道要读多少字节的数据,碰到空格或者不匹配的字符才停止
比如文件内容是:
12345678912345
fscanf(fp,"%d",&x);
会读到这个数字结束导致x 溢出
如果文件内容是
123abc
或者是
123 234
那么x就是123
所以用fscanf()读取文件时要事先知道文件的数据组织方式
追问
我想再问一下,当数据读到内存中的文件缓冲区内(全为二进制数据)时,系统读到像1234567asdf这种连续字符形式时,他并不知道a在内存中的二进制码值97其实是要表示'a'而不是整数97啊,那么1234567a就可能进入变量x中了(这里先不管overflow)等,所以我觉得这种匹配法则不应该啊,还是我们得先知道文件是以二进制或文本形式保存的,然后我们访问该文件即打开文件时我们指定以相应打开方式,接着编译系统可能对数据转换吗?
追答
比如fscanf(fp,"%d",&x)  读取内存读到97,那就立即会停止,因为"%d"格式使得函数只会接收0x30--0x39的值,读到其他的肯定是不匹配的,函数设计的时候就是把读到的数据当ascii码看待,给x赋值的时候会把读到ascii序列转换为对应的数值

文本文件的概念祸害了好多人,实际上根本不存在所谓的文本文件格式,它就是个普通的二进制文件,一个文件内的数据按字节解释为ascii码(或者按二字节为单位解释为unicode),就是文本了,文本文件就是所有数据都是可显示的ascii码范围的文件,一个二进制文件以文本方式打开,就会把它的内容按字节解释为ascii码,
qjqjqjb
2012-05-24 · TA获得超过110个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:72.7万
展开全部
%d是整型变量的标志,占四个字节。int就是整型,占四个字节,long是长整型,也占四个字节;short是短整型,占两个字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangzai01261
2012-05-24
知道答主
回答量:18
采纳率:0%
帮助的人:8.1万
展开全部
是的
x之前肯定要声明的
声明晚类型 自然就知道长度了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
765282924
2012-05-24
知道答主
回答量:1
采纳率:0%
帮助的人:1629
展开全部
是根据%d
追问
%d,是多少字节呢?如何区分当x类型为int, long, short int,呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式