2012-05-04 7 views
0

私はテキストファイルから各行を読み込み、標準出力に出力したいところです。理由なく、ファイルの最後の行をその文字配列に保存するだけです。 理由(いくつかの説明があります)C - ファイルからの読み込み(かなりシンプル)

9 int main(){ 
10  FILE * f; 
11  char buffer[255]; 
12  char * arr[255]; 
13  int i=0,n; 
14 
15  f = fopen("input.txt", "r"); 
16  while(1){ 
17   if(fgets(buffer,255,f) != NULL){ 
18    arr[i++] = buffer; 
19   }else break; 
20  } 
21  n=i; 
22  for(i=0;i<n;i++){ 
23   printf("%s",arr[i]); 
24  } 
25 
26  fclose(f); 
27  return 0; 
28 } 

答えて

1

あなたのプログラムは、ファイルの各行

EDITで上書きされます1つのバッファがあります:あなたは私をインクリメントすることはありません

char* buf; 
while(1){ 
    buf = malloc(255); 
    if(fgets(buf,255,f) != NULL){ 
     arr[i++] = buf; 
    } 
    else break; 
} 
+0

OK、しかし、バッファがARRに保存されるたびに[i]の – NiCU

+1

ARRを[i]が唯一のバッファへのポインタを取得します。最終的にarrのすべてのエントリにはbufferのアドレスが含まれ、bufferにはファイルの最後の行が格納されます – TJD

+0

arr []と思っている内容をstrcpyする必要があります。 – ervinbosenbacher

-1

を。あなたの読書ループでは、0とi ++を保存します。しかし、新しいi値をiに保存しません。だからあなたの次の反復のために私は0です。 "arr [i ++] = buffer;の後に" i = i + 1 "を追加する必要があります。

+0

そして、 "arr [i ++] = buffer;ではi ++は必要ありません"それは "arr [i] = buffer;"でなければなりません。 – jneff

1

char * arr[255]は255文字の配列へのポインタです。 arr[i] = bufferを割り当てると、割り当てられていない配列の各要素のポインタがbufferになります。したがって、すべての要素は同じchar buffer[255]を指します。これは、印刷するまでに最後の行のみを持ちます。ここで

1

#include <cstdlib> 
#include <string.h> 

int main(){ 
    FILE * f; 
    char buffer[255]; 
    char * arr[255]; 
    int i=0,n; 

    f = fopen("c:\\temp\\input.txt", "r"); 
    while(1){ 
    if(fgets(buffer,255,f) != NULL){ 
     arr[i] = (char *) malloc(255 * sizeof(char)); 
     strcpy(arr[i++], buffer); 
    }else break; 
} 
n=i; 
for(i=0;i<n;i++){ 
    printf("%s",arr[i]); 
} 

fclose(f); 
for (int j=0; j<i; j++) 
    free(arr[j]); 
return 0; 
} 
関連する問題