我正在尝试使用github上的这个开源LZW压缩代码。代码正确压缩了我的二进制文件,但在尝试解压缩时,代码调用getchar
并从50,000个字符文件中的20个字符内到达EOF
。
Github存储库:
https://github.com/geoffreylitt/lzw
我查看了解码功能以查看错误。最终我将代码缩减到只有这个:
void decode()
{
int c = 0;
while ( (c = getchar()) != EOF) {
fprintf(stderr, "%i\n", c);
}
}
这是makefile:
CC=gcc
CFLAGS=-O3 -g3 --std=c99 -Wall
all: encode decode
encode: main.c hasharray.c encode.c decode.c bitio.c stack.c globals.c
$(CC) $(CFLAGS) -o ../bin/encode $^
decode: encode
ln -f ../bin/encode ../bin/decode
这就是我执行脚本的方式:
./decode <encoded.bin> decoded.bin
我认为这与stdin如何处理文件输入有关。但我对它如何处理来自<encoded.bin>
的输入流没有太多了解。
在接近全新安装的Ubuntu 16.04上,它与相同的代码,相同的文件和相同的命令完美配合。我真的想知道他们为什么或如何处理这种情况,如果我的代码有同样的问题,我可能会意识到为什么会在以后的路上。
Thanks!