C++程序在奇怪的输入上崩溃

zar*_*cel -1 c++ string

我编码霍夫曼压缩,它适用于所有扩展的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)

我还需要说,尽管通过了所有早期的步骤(计算代码等),但结果是错误的.好像我的程序不理解那些字符.

bil*_*llz 6

您正在访问未定义行为的字符串的边界.

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)

顺便说一下,这是学习调试器的好时机.捕获程序崩溃的确切位置并找出原因.