我编码霍夫曼压缩,它适用于所有扩展的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();
}
Run Code Online (Sandbox Code Playgroud)
我还需要说,尽管通过了所有早期的步骤(计算代码等),但结果是错误的.好像我的程序不理解那些字符.
您正在访问未定义行为的字符串的边界.
for(int i=0;i<=contents.length();i++)
^^
Run Code Online (Sandbox Code Playgroud)
应该:
for(int i=0;i<contents.length();i++)
^^
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这是学习调试器的好时机.捕获程序崩溃的确切位置并找出原因.