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))
{
...
}
...
}
...
}
}
阅读(591) | 评论(0) | 转发(0) |