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

C 用popen()打开的文件没有EOF?,c,C,我想将目录的内容写入缓冲区,但我总是得到 “dir to large for buffer”…我不知道为什么目录最大长度为3000个字符 它也不使用“\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

我想将目录的内容写入缓冲区,但我总是得到 “dir to large for buffer”…我不知道为什么目录最大长度为3000个字符

它也不使用“\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';
}
#包括
int main(int argc,字符**argv){
文件*fp;
fp=波本(“ls/etc”、“r”);
字符c;
int i=0;
字符缓冲区[20000];
而((c=fgetc(fp))!=EOF){
缓冲区[i]=c;
i++;
如果(i=20000){
printf(“dir to large for buffer”);
打破
}
}
缓冲区[i]='\0';
}
fgetc()
返回
int
,而不是
char

charc

这是错误的。应该是

intc

如前所述:

if(i=20000).

将始终评估为真。应该是

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


假设您显然试图创建一个以
'\0'
结尾的C字符串。

i=20000
-->
i==20000-1
。也
charc-->
intc不相关,但您确实应该缩进代码。顺便说一句,缩进不是为了取悦你的老师,而是为了你(也为了我们),这样你/我们可以阅读你的程序,而且,
i=20000
应该是
i==20000
。没错,但不是唯一的问题。