用popen()打开的文件没有EOF?

时间:2016-06-30 11:48:49

标签: c

我想将目录的内容写入缓冲区,但我总是得到 “dir to large for buffer”......我不知道为什么目录是max 3000 chars long

它也可以使用'\ n'代替EOF

#include <stdio.h>

int main(int argc,char** argv){
   FILE* fp;
   fp=popen("ls /etc","r");
   char c;
   int i=0;
   char buffer[20000];
   while((c=fgetc(fp))!=EOF){
      buffer[i]=c;
      i++;
      if(i=20000){
         printf("dir to large for buffer");
         break;
      }
   }
   buffer[i]='\0';
}

1 个答案:

答案 0 :(得分:3)

Per the documentationfgetc()返回int,而不是char

char c;

错了。它应该是

int c;

并且,如上所述:

if (i=20000) ...

将始终评估为true。它应该是

if (i==(20000 - 1)) ...

鉴于您显然正在尝试创建一个'\0'终止的C字符串。