1

这是我的代码的最新版本。感谢您的 zpipe.c,它现在适用于我所有的 gunzip 文件,无论它们的大小如何。但是我不明白的是,在内循环中 printf("%s", out) 仍然打印相同的初始结果(在第一个循环中解压的部分)。但是在解压文件 file.txt 中,一切正常。一切正常解压正常。我必须在每个内部循环中处理解压缩的输出,实际上我不需要输出文件(file.txt)。

while (1) {
    int bytes_read;

    bytes_read = fread (in, sizeof (char), sizeof (in), file);
    printf("hello");
    FAIL (ferror (file), "read");
    strm.avail_in = bytes_read;
    printf("%i\n",bytes_read);
    getchar();
    if (strm.avail_in==0)
        break;
    strm.next_in=in;
    do {
        strm.avail_out = CHUNK;
        strm.next_out=out;
        CALL_ZLIB(inflate (&strm, Z_NO_FLUSH));

        printf ("%s", out);

        getchar();
        have=CHUNK-strm.avail_out;
        fwrite(out,1,have,f2);     
    } while (strm.avail_out == 0);
    if (feof (file))
    {
        inflateEnd (& strm);
        break;
    }
}
4

1 回答 1

2

你没有重置next_in并且next_out在你的循环中。这些已经超越了所读和所写的内容。请阅读zlib.h然后看看如何使用 zlib

于 2013-10-29T14:47:15.727 回答