将 zlib 流读入动态分配的缓冲区

Reading zlib stream into dynamically allocated buffer

我正在尝试将 gz 文件读入 char 缓冲区,该缓冲区应根据文件的大小调整大小。

  gzFile infile = gzopen(infile_name, "rb");
  
  char *buf      = malloc(256);
  int total_read = 0;
  int incr_read  = 0;
  
  do {
    incr_read   = gzread(infile + total_read, buf, 256);
    total_read += incr_read;
    buf         = realloc(buf, total_read + 256);
  } while (incr_read > 0);

由于某种原因这会立即停止,只读取前 256 个字节。它不可能到达文件末尾,因为它的大小为 1.3 kB(压缩后)。我怎样才能继续阅读文件的其余部分?

我是 C 的新手,所以我可能忽略了一些明显的东西,但我无法在其他地方找到解决方案。

gzread() 的第一个参数应该是 gzFile 句柄,但由于某种原因你传递了 infile + total_read 而不是 infile.

gzFile 是一个不透明的指针,指向包含大量内部状态信息的结构,因此您不应该对其进行任何算术运算。 gzread 的第一个参数对于循环的每次迭代都应该相同。

我移动的是文件指针而不是缓冲区指针,这就是它不起作用的原因。应该是 gzread(infile, buf + total_read, 256);