Chinaunix首页 | 论坛 | 博客
  • 博客访问: 567122
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:15:26

1 现象:问题描述
在对监控程序进行单元测试时,发现监控程序在读取配置文件时最后一行记录会读两遍,造成重复监控。
2 关键过程:根本原因分析
分析一下代码:
if (fp = fopen(...))
{
    while (!feof(fp))
    {
        fgets(buffer,MAXLEN,fp);
        if (strlen(buffer) != 0)
        {
            if (MakeNode(&pLink, buffer))
            {
                ...
            }
            ...
        }
        ...
    }
}
经过检查,程序在读出最后一行记录后,while检查feof(fp)为假,会继续进入循环。在fgets时取不出数据,但是由于buffer中保留着上次取出的数据,也就是最后一行记录,所以会把最后一行记录处理两遍。
3 结论:解决方案及效果
fgets前将buffer清空,且对fgets的返回值进行判断。
if (fp = fopen(...))
{
    while (!feof(fp))
    {
        memset(buffer,0,sizeof(buffer));
        if(fgets(buffer,MAXLEN,fp)==NULL)
        {
            ...
        };
        if (strlen(buffer) != 0)
        {
            if (MakeNode(&pLink, buffer))
            {
                ...
            }
            ...
        }
        ...
    }
}
阅读(586) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~