读取从文件到数组的所有行

时间:2016-05-08 20:36:22

标签: c arrays text-files

如何从文本文件中读取多行(约5000行)并将所有行存储在单个字符串数组中? 我已经有一些代码运行顺利,但它没有按照预期的方式工作。我只得到存储在数组中的文件的最后一行。

  int main(){
   int n;
   char line[401];
   char string[10000];
   fr = fopen ("fila1b.txt", "rt");
   while(fgets(line, 400, fr) != NULL){
     strcat(string, line);
   }
   fclose(fr);
   printf("%s\n", string );
  } 

编辑:我更新了代码并进行了一些更改。现在我使用strcat函数将fgets获取的行的内容插入到原始字符串数组中。显然它正在发挥作用。但是当我打印'字符串'时,它只打印前300行,然后它给我分段错误。

1 个答案:

答案 0 :(得分:0)

通常的方法是使用readfread来填充所有字符:

#define MIN_CHUNK_SIZE (1024)

char *read_file(FILE *f) {
  size_t n_read_total = 0;
  size_t buf_size = MIN_CHUNK_SIZE + 1; // Allow space for nul terminator.
  char *buf = safe_malloc(buf_size);
  size_t n_avail;
  do {
    n_avail = buf_size - n_read_total - 1;
    if (n_avail < MIN_CHUNK_SIZE) {
      // Double the buffer size.
      n_avail += buf_size;
      buf_size += buf_size;
      buf = safe_realloc(buf, buf_size);
    }
    size_t n_read = fread(buf + n_read_total, 1, n_avail, f);
    n_read_total += n_read;
  } while (n_read == n_avail);
  buf[n_read_total] = '\0';
  return safe_realloc(buf, n_read_total + 1);
}