Проблема: строка записывает поверх другой строки - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь обработать две строки, используя следующий код.Результат работает просто отлично, но всякий раз, когда я пытаюсь выполнить ту же операцию для второй строки, первая строка записывается по значению второй.например, если первая строка = "fuhg", а вторая строка равна = "abc", первая строка становится: "abcg".Это, вероятно, связано с распределением памяти или чем-то подобным, но я не могу понять это, поскольку я не очень хорош в этой области.

string newPassChar;
string newBloom=bloomFilter(newPass); 
int index=0;
for ( int k =0 ; k < alpha.length() ; k++ )
{
    if (newBloom[k]=='1')
      { 
        newPassChar[index]=alpha[k];
      index++;
      }
}

1 Ответ

0 голосов
/ 27 февраля 2019

С cppreference std :: basic_string :: operator [] :

No bounds checking is performed. If pos > size(), the behavior is undefined.

С cppreference std :: basic_string construcor :

1) Default constructor. Constructs empty string (zero size and unspecified capacity).

Итак:

string newPassChar;

создает новую строку с size() == 0.

Тогда:

newPassChar[0] = ...

перезапишет нулевой символ в строке.Но на следующей итерации, когда index = 1, тогда:

newPassChar[1] = ....

это неопределенное поведение .и порождает демонов.

Я думаю, что вы хотите "push_back" символы, когда вы читаете их:

        newPassChar.push_back(alpha[k]);

Нет необходимости хранить другую переменную "index", используемую для индексации строки,сам строковый объект знает свой размер, он доступен в методе size().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...