2016-06-30 6 views
-3

それはまた仕事をdoestpopen()で開いたファイルにEOFがありませんか?

を私はバッファに、ディレクトリの内容を書きたいが、私は常に 「バッファ用の大型のDIR」を取得...とディレクトリは最大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'; 
} 
+3

'i = 20000' - >' i == 20000-1'です。 'char c;' - > 'int c;' – BLUEPIXY

+3

無関係ですが、本当にコードをインデントする必要があります。 BTWのインデントはあなたの先生を喜ばせるものではありませんが、それはあなたのために(そしてまた私たちのために)あなたのプログラムを読むことができます。 –

答えて

3

Per the documentationの、fgetc()戻りint、ないcharと。

char c;

が間違っています。それは

int c;

と、述べたようにする必要があります:

if (i=20000) ...

は常にtrueと評価されます。それはあなたが明らかに'\0' - 末端C文字列を作成しようとしている

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

を与えられるべきです。

+1

また、 'i = 20000'は' i == 20000'です。 –

+0

真実ですが、唯一の問題ではありません。 –

関連する問題