请大神帮忙分析一下原因,要怎么解决才行?

........
fp = popen(cmd, "r");
if (!fp) {
return -1;
}
while (1) {

memset(buffer, 0, sizeof(buffer));
fgets(buffer, sizeof(buffer) - 1, fp); ///执行某条命令时,会挂在这里
f(feof(fp)) {
break;
}
printf(xxxxx);
}

Smart猫小萌
浏览 156回答 1
1回答

慕娘9325324

起码你的代码有一个漏洞:第一次进入while时,!feof(pipe)是在判断谁?说明你对feof()这个函数并没有掌握,它必须在逻辑上“紧跟”在读文件动作之后才能正确生效,这第一次是“紧跟”在哪个读动作之后?到了文件结尾处就更可笑了:经while(!feof(pipe))判断文件还没有结束,比如说文件中还剩一个最后的'\n',可是体中的if(fread(&c,1,1,pipe)==1)中的fread函数还能读到什么?细节我就不说了,太长。建议把while(!feof(pipe)){if(fread(&c,1,1,pipe)==1){result[i++]=c;if(c==0)break;}}这一段改成while(fread(&c,1,1,pipe),!feof(pipe)){result[i++]=c;//if(c==0)//这两句考虑一下吧,文件中有0吗?不可能有0,所以逻辑就有问题,建议删除//break;}一试。
打开App,查看更多内容
随时随地看视频慕课网APP