fscanf(fp,"%d",&x);该函数怎知每次读取多少字节长度的数据呢?是判断变量x的类型吗
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/10/07 13:15:19
fscanf(fp,"%d",&x);该函数怎知每次读取多少字节长度的数据呢?是判断变量x的类型吗
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码,
比如文件内容是:
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码,
C语言如何判断函数的类型 fff(float x ) {printf("%d\n",x*x);} 为什么该函数的类型是i
设有一指向某种数据类型变量Var的指针p,p值为X,该类型数据所占空间为Y字节,则p+N的值为?
判断下列问题中的变量y是不是x的函数?
若已定义了如下的共用体类型变量x,则x所占用的内存字节数为()
求该函数的间断点,并判断其类型.f(x)=arctan(1/x^2-3x+2)
判断下列关系式所确定的变量y是否是x的函数,并说明理由
vb中读取文本数据文件时,想对文本中的数据赋给新的变量.其中的2,3只是作为判断用,下面的数据是需操作的
设X与Y是同一类型的变量,试设计一个算法,把X与Y中的数据相互交换
fscanf(fp,"%d ",&cars[i][0]); 怎么改为cin形式 fprintf(fp,"%d ",car
判断下列变化过程中,两变量存在函数关系的是A.x,y是变量,y=±2根号x
IP数据报 首部长度的60字节是怎么来的,下面的看不懂
设有如下函数 fun (float x) { printf("\n%d",x*x); } 则函数的类型是