Брутфорс. Заполнение строкового массива. Непонятный объект

Рейтинг: 0Ответов: 1Опубликовано: 25.06.2023

Начал писать брутфорс и поскольку только недавно начал изучать программирование наткнулся на непонятную мне проблему. Во время определение последнего элемента с конца, которому присваивается буква "а" и выводе его, консоль стала выводить какую то ахинею. Причем такое происходит не всегда, компилятор может просто прекратить работать, может вывести нормально, может выдать ошибку, а может начать писать непойми что. К слову, такое работает только с "паролем(password)" если его размер 10. В случае если размер 4 то все работает исправно. Если больше (10 > password.length() > 4 > 12) то код не работает. Помогите пожалуйста!

    #include <iostream>
using namespace std;
int main()
{

    setlocale(LC_ALL, "");
    //97 
    //122
    string password = "";
    cin >> password;
    string* pasred = new string[password.length()];
    string u_password = "";
    cout << password.length() << "\n";
    int a = char('a');
    for (int i = 0; i < password.length(); i++)
    {
        pasred[i] = char(a);
        //pasred[password.length() - i] = char(a++);
        cout << pasred[password.length() - i] << "\n";
        cout << pasred[i];


    }
   

}

введите сюда описание изображения

Ответы

▲ 1

У вас была пустая строка в переменной u_password. В C++ строки имеют терминатор конца строки. Вы пытаетесь записать в переменную нулевой длинны несколько символов, и затираете, таким образом, терминатор конца строки. В итоге выводится просто кусок оперативной памяти справа от указателя на вашу переменную. Вместо того, чтобы пытаться писать в пустую строку, создайте указатель на строку длинной password.length() и пишите в него. Не забудьте про терминатор конца строки. В C++ вы должны быть очень осторожны при обращении с памятью в целом, и строками в частности.