C - 从文件中读取(非常简单)

时间:2012-05-04 21:50:51

标签: c stdio

我有这个代码,我想从每行的文本文件中读取,然后将其打印到标准输出。无缘无故,它只保存该字符数组中文件的最后一行。 任何提示为什么(一些解释)?

  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 个答案:

答案 0 :(得分:1)

您的程序只有一个缓冲区被文件的每一行覆盖

编辑:

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

答案 1 :(得分:1)

char * arr[255]是一个指向255个字符数组的指针。分配arr[i] = buffer时,您的指针指向buffer,用于(未分配)数组的每个元素。因此,每个元素都将指向相同的char buffer[255],当您打印时,它将只包含最后一行。

答案 2 :(得分: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;
}

答案 3 :(得分:-1)

你永远不会增加我。在你的阅读循环中,你保存为0然后是i ++。但它并没有将新的i值保存到i中。因此,对于下一次迭代,您的i为0。您需要在“arr [i ++] = buffer;”

之后添加“i = i + 1”