首页  >   经验  >   C语言文件读写文件尾多出一个字符的原因分析过程和解决过程

C语言文件读写文件尾多出一个字符的原因分析过程和解决过程

查看 codexia 的博客 2015-06-27 01:01:29 3076
C   语言   文件  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介本文是朋友提出的一个问题,即读取一个文件并写入一个新文件,新文件结尾多出了一个字符。而代码看上去很正常,结果出人意料。这里通过逐步的分析,层层递进,一步一步的把问题的原因剖析出来,并提出了两种解决办法。你可以从此分析过程中,领略到跟踪问题的方法和思路,同时也可以对此问题有更加深入的理解。给出的解决办法,也可以切实的解决实际问题。

    本文是朋友提出的一个问题,即读取一个文件并写入一个新文件,新文件结尾多出了一个字符。而代码看上去很正常,结果出人意料。这里通过逐步的分析,层层递进,一步一步的把问题的原因剖析出来,并提出了两种解决办法。你可以从此分析过程中,领略到跟踪问题的方法和思路,同时也可以对此问题有更加深入的理解。给出的解决办法,也可以切实的解决实际问题。
    一朋友问我了一个问题,说以下代码将一个文件的内容读取出来,然后逐个字符的写入到另一个文件,然后完成后,新文件竟然多了一个文件。很疑问,代码看上去似乎都是正常的。
    代码如下:

#include <stdio.h>
void main()
{
    FILE * fp=0;
    FILE * fp2=0;
    fp = fopen("1.txt","r");
    fp2= fopen("2.txt","w");
    char ch;
    while (!feof(fp))
    {
        ch = fgetc(fp);
        fputc(ch,fp2);
    }
    fclose(fp);
    fclose(fp2);
}

    以上代码看上去确实不存在问题。一切都合乎道理,就是最后多了一个字符。他不清楚为什么,问了我。我一开始也不知道为什么,代码确实看不出任何问题。所以就晚上回去研究一番。
    既然要看多出的一个字符,我们就要看这个多出的字符是什么字符,从而来确定出了什么问题。因为自己的电脑没有其他软件,只有一个VS。要看txt文件的二进制数据,还一下子卡住了。突然想起了VS有一个查看二进制数据的功能。
    VS查看二进制数据的方法。先将文件添加到解决方案中,然后右击“打开方式”,选择二进制打开即可。根本就不需要其他软件。
    这样打开后,发现多了一个0xFF字节,对应为十进制就是-1,即宏EOF,表示文件尾标识。
    然后就想,为什么会多出这个EOF字符呢?所以就使用了断点单步跟踪。给1.txt文

1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd 1PET4i 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:C语言文件读写文件尾多出一个字符的原因分析过程和解决过程
文章地址:http://www.cjjjs.com/article/62720152911944
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:C语言文件读写文件尾多出一个字符的原因分析过程和解决过程
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. C++ Primer Plus 6th 6.11 编程练习题 第7题 统计单词的元音和辅音等的个数 查找全网同类文章
  2. C++ Primer Plus 6th 6.11 编程练习题 第6题 记录捐款姓名和捐款数额 查找全网同类文章
  3. C++ Primer Plus 6th 6.11 编程练习题 第5题 个人所得税计算 查找全网同类文章
  4. C++ Primer Plus 6th 6.11 编程练习题 第4题 菜单选择显示BOP的成员 查找全网同类文章
  5. C++ Primer Plus 6th 6.11 编程练习题 第3题 编写一个菜单驱动程序的雏形 查找全网同类文章
  6. C++ Primer Plus 6th 6.11 编程练习题 第2题 循环读取double并统计数据 查找全网同类文章
  7. C++ Primer Plus 6th 6.11 编程练习题 第1题 字符的大小写转换和回显字符 查找全网同类文章
  8. C++ Primer Plus 6th 6.10 复习题 第9题 重写代码片段,避开break和continue 查找全网同类文章
  9. C++ Primer Plus 6th 6.10 复习题 第8题 case的数字标签和字符标签的区别 查找全网同类文章
  10. C++ Primer Plus 6th 6.10 复习题 第7题 用switch改写if else 查找全网同类文章
分享到:
分享文章[C语言文件读写文件尾多出一个字符的原因分析过程和解决过程]到QQ空间

相关阅读

猜您感兴趣