代码之家  ›  专栏  ›  技术社区  ›  Grak

std::比较字符串中的符号时发生out\U of\U range错误

  •  0
  • Grak  · 技术社区  · 7 年前

    我正在学习C++,在这项作业中,我将学习有关C++的各种错误。我识别并修复了这段代码中之前的两个错误,但第三个错误发生在程序运行阶段抛出“std::out\u of\u range”并关闭时。

    这个程序不是我写的,但基本上是猜测刽子手的单词。
    如果正确猜测最后一个字母,则会发生异常。

    指向整个代码的链接是 https://onlinegdb.com/Hk-84-WSz ,但据我所知,相关内容发生在第100行和第106行。

    整个错误消息:

    terminate called after throwing an instance of 'std::out_of_range'                                                                                                                  
    what():  basic_string::at: __n (which is 1) >= this->size() (which is 1)                                                                                                          
    Aborted  
    

    下面是导致异常的函数:

    bool onko_sana_jo_arvattu(std::string sala, std::string arvatut)
    {
    
        for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
        {
        // The next line seems to be causing the exception when the last letter has been guessed
            if (arvatut.find(sala.at(indeksi)) == std::string::npos)
            {
                return false;
            }
        }
    
        std::cout << "stuff" << std::endl;
        return true;
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Edgar Rokjān    7 年前
    indeksi <= sala.size()
    

    必须是:

    indeksi < sala.size()
    

    std::string 索引自 0 size - 1 .

        2
  •  0
  •   Grak    7 年前
    for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
    

    更改为

    for (std::string::size_type indeksi = 0; indeksi < sala.size(); ++indeksi)
    

    从分歧中找到解决方案(“编程讨论”)