C 将文件中的所有行读取到数组

C 将文件中的所有行读取到数组,c,arrays,text-files,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);

如何从文本文件中读取多行(约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行,然后它会给我分段错误。

通常的方法是用
read
fread
将所有字符发音:

#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);
}
#定义最小块大小(1024)
char*read_文件(文件*f){
大小\u t n\u读取\u总计=0;
size\u t buf\u size=MIN\u CHUNK\u size+1;//为nul终止符留出空间。
char*buf=安全的malloc(buf\u大小);
大小不可用;
做{
n_avail=buf_size-n_read_total-1;
if(n\u avail<最小块大小){
//将缓冲区大小增加一倍。
n_avail+=buf_尺寸;
buf_尺寸+=buf_尺寸;
buf=安全实位(buf,buf尺寸);
}
大小n读取=fread(buf+n读取总计,1,n可用,f);
n_read_total+=n_read;
}while(n_read==n_avail);
buf[n_read_total]='\0';
返回保险箱realloc(buf,n读取总量+1);
}

每次调用
gets
都可能会覆盖
行的内容。
循环时,需要在
的正文中加入一些内容。。。可能是将行内容放入数组的代码?行没有数组,所有代码都丢失了。这不是一个“写我的代码”的网站。你得到了什么,你的具体问题是什么?你正在把每一行读入一个数组,每次都是同一个数组。当数组以零结尾时,有时称为
字符串,但C没有字符串类型。您要么需要一个二维数组(可能会破坏局部变量,并且当输入具有不同长度时会浪费内存),要么需要一个指针数组,您可以使用
strdup
分配它。