1. ホーム
  2. c++

[解決済み] libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string Error?

2022-02-03 20:47:53

質問

空白で区切られた単語の文字列を受け取り、各単語を配列に追加する関数を書いているところです。libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string." というエラーが出続けますが、このエラーが何なのかがわかりません。

void lineParser(string line, string words[])
{
    string word = "";
    int array_index = 0;
    int number_of_words = 1;
    int string_index = 0;
    while (string_index < line.length())
    {
        if (line.substr(string_index,1) != " ")
        {
            int j = string_index;
            while (line.substr(j,1) != " ")
            {
                word += line.substr(j,1);
                j++;
            }
            words[array_index] = word;
            array_index++;
            word = "";
            number_of_words++;
            string_index = j;
        }
        else
        {
            string_index++;
        }
    }
}

解決方法は?

あなたの変数 j もまた、境界チェックなしで増加することが許されています。 最終的にはインデックスとして使っている文字列の長さを超えてしまいますが ( .line.substr(j,1) ).

非常に悪い答えは、文字列の最後にスペースを追加することです。 line を検索する前に ' ' 文字になります。 より良い答えは、jをインデックスとして文字列内の文字にアクセスする関数を呼び出す前に、jと文字列の長さを照合することです。