0

テキストファイルから各行を読み取り、それを標準出力に出力したいこのコードがあります。理由もなく、ファイルの最後の行のみをその文字配列に保存します。理由はありますか(いくつかの説明があります)?

  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 }
4

4 に答える 4

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;
}
于 2012-05-04T22:14:27.337 に答える
1

Your program only has one one buffer that gets overwritten with each line of the file

EDIT:

char* buf;
while(1){
   buf = malloc(255);
   if(fgets(buf,255,f) != NULL ){
        arr[i++] = buf;
    }
    else break;
}
于 2012-05-04T21:55:23.653 に答える
1

char * arr[255]255 文字の配列へのポインタです。割り当てると、(未割り当ての)配列の各要素をarr[i] = buffer指すポインターが作成されます。bufferしたがって、すべての要素は同じ を指し、char buffer[255]印刷するまでに最後の行しかありません。

于 2012-05-04T22:01:31.560 に答える
-1

iをインクリメントすることはありません。読み取りループでは、0 に保存してから i++ に保存します。ただし、新しい i 値は i に保存されません。したがって、次の反復では i は 0 です。「arr[i++] = buffer;」の後に「i = i + 1」を追加する必要があります。

于 2012-05-04T21:58:03.277 に答える