52.文件读取多一位的情况解决

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了52.文件读取多一位的情况解决相关的知识,希望对你有一定的参考价值。

  • 用feof读取总是会多读取一位.
    “C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。
    那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。                          总结起来就是feof就是多走一节才能判断是不是到文件末尾,这样就会造成多读取一位.那么这样怎么处理呢?

 

如果是读写文本操作:

1         while (!feof(pf))
2         {
3             char ch = fgetc(pf);
4             
5             if (ch != -1)
6             {
7                 fputc(ch, pf2);
8             }
9         }    

 

如果是读写二进制操作:

1             fseek(pf, 0, SEEK_END);//文件指针移动到末尾(结束的位置)
2         int length = ftell(pf);//获取当前文件指针距离开头的长度
3 
4         fseek(pf, 0, SEEK_SET);//移动当前文件指针到开头(开始的位置)
5         for (int i = 0; i < length; i++)
6         {
7             char ch = fgetc(pf);
8             fputc(ch, pf2);
9         }    

 

以上是关于52.文件读取多一位的情况解决的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——数字序列中某一位的数字》代码

如何实现C语言的DES加密算法实现,请关注

winform怎么读一个16位整数的每一位

C#文本框的文本,正则表达式约束,正整数和小数点后只有一位小数

MySQL:一位的最小数据类型

LeetCode66 Plus One