莫名其妙的EOF,输出文件总是多一个字节,cmp: EOF on xxx

Cixy 2006-05-29 02:09:51

做一个哈夫曼编码的小程序,开始用递归方法查表进行解码,正常;后来试试不用递归来写,就改了一下。。。发现。。。。结果不同,凭空多出一个字节?!用cmp比较。。。报告"cmp: EOF on ...",怎么回事儿??

后来输出每一个保存到文件里字节,发现两种写法的输出完全一样,字节数也一样,可是。。。费解的就是非递归方法产生的文件就是会多一个字节,而且用winhex看不到那个字节。。。。。基本上愤怒的要崩溃了。。。。求大侠指点。

相关的定义部分

typedef unsigned char Symbol; /* any byte is encodable */
typedef struct HuffNode *HuffTree;
struct HuffNode {
Bool isExt; /* is this an external node? */
Symbol sym; /* defined if isExt only */
HuffTree branch[2]; /* defined if !isExt only */
};

// Open bit stream for reading from fp
BitStream BitStream_OpenRead(FILE *fp);

// Open bit stream for writing to fp
BitStream BitStream_OpenWrite(FILE *fp);

// Transfer nbits (0..CHAR_BIT) from data to bs
void BitStream_Put(BitStream bs, unsigned char data, int nbits);

// Return nbits (0..CHAR_BIT) from bs
unsigned char BitStream_Get(BitStream bs, int nbits);


递归版本

static unsigned char traverse_and_decode(HuffTree t, BitStream bs){
if (t->isExt == FALSE){
int j = BitStream_Get(bs, 1);
return traverse_and_decode(t->branch[j], bs);
}
return t->sym;
}

void HuffTree_Decode(HuffTree t, FILE *fin, FILE *fout, int num_bytes)
{
int i;
BitStream bsi, bso;

bsi = BitStream_OpenRead(fin);
bso = BitStream_OpenWrite(fout);

for (i=0; i<num_bytes; i++)
BitStream_Put(bso, traverse_and_decode(t, bsi) , CHAR_BIT);

BitStream_Close(&bso);
BitStream_Close(&bsi);
}


非递归版本

void HuffTree_Decode(HuffTree t, FILE *fin, FILE *fout, int num_bytes)
{
int i, j;
HuffTree tt;
BitStream bsi, bso;

bsi = BitStream_OpenRead(fin);
bso = BitStream_OpenWrite(fout);

for (i=0; i<num_bytes; i++){
tt=t;
while (tt->isExt==FALSE){
j = BitStream_Get(bsi,1);
tt=tt->branch[j];
}

BitStream_Put(bso, tt->sym, CHAR_BIT);
}

BitStream_Close(&bso);
BitStream_Close(&bsi);
}

...全文
592 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-05-29
  • 打赏
  • 举报
回复
楼主可以用 UE 打开文件操作试试 ~

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧