fscanf函数读取完字符串后文件指针不在字符串末尾

一段读取文件中字符串的代码是这样的:
while (!feof(fp))
{
fscanf(fp, "%s", ID);//ID的定义是char ID[10]
if (strcmp(ifo->ID, ID) == 0)
break;
}
实际执行过程中,在成功将字符串读入ID后文件指针的位置并没有指向字符串的末尾,而是指向了字符串中间随机的一个位置(字符串长度为6,在读取完字符串后文件指针有时指向4,有时指向5,有时指向6),请问这到底是怎么回事

“文件指针”,就是这个代码中的fp,实际上并不是指向文件中的具体位置的,但代码操作时把它当作指向“具体位置”来对待。它实际上是指向被打开的文件信息的结构体的,文件具体位置的指针在“文件信息结构体”中另有声明,这个“文件信息结构体”中的指针(也可能只是个位置计数器)才按照读取多少字符而向后移动。像fscanf(fp, "%s", ID);这样的语句都是拿fp说事,fseek函数更是用fp“作移动对象”,所以使人们产生了误会,以为fp确实是随着文件写稿或读取而移动的,实际上它的值是不变的,因为“文件信息结构体”在内存中的位置不会变动。你那里一会儿4,一会儿6可能另有原因,未见代码我一时说不清……供参考。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网