我编码霍夫曼压缩,它适用于所有扩展的ascii(0-255),但当我打开像mp3这样的非文本文件时,就像在里面那样:
它崩溃了。我测试过,并不是因为它的大小,因为输入数据。ťîxł¸H... W]`9MČȢŁ¤Ąxw
它在文件保存时崩溃,继承代码:
for(int i=0;i<=contents.length();i++){
newString +=kod[contents[i]];
}
saveFile("test_nowy.txt", newString);
bool saveFile (string name, string contents)
{
ofstream file;
file.open(name.c_str());
file << contents;
file.close();
}
我还需要说,尽管通过了所有早期步骤(计算代码等),但结果是错误的。好像我的程序不理解那些字符。
答案 0 :(得分:6)
您正在访问未定义行为字符串的边界。
for(int i=0;i<=contents.length();i++)
^^
应该是:
for(int i=0;i<contents.length();i++)
^^
顺便说一句,这是学习调试器的好时机。捕获程序崩溃的确切位置并找出原因。
答案 1 :(得分:2)
答案 2 :(得分:0)
你说它适用于0..255的所有字符,但不适用于这些字符,这意味着你使用的不是8位字符。如果是这样,你可能正在索引范围之外。