Почему изменение строковых символов не дает никакого вывода? - PullRequest
0 голосов
/ 22 сентября 2019
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    s[0] = 'b';
    s[1] = 'a';
    s[2] = '\0';
    cout << s;
    return 0;
}

Я объявляю строку в своем коде и затем назначаю символьные значения, используя индексы массива.Когда я печатаю строку, это не дает мне вывода.Мой вопрос: почему бы и нет?

В чем причина того, что он не дает вывода?

1 Ответ

4 голосов
/ 22 сентября 2019

То, что вы пытаетесь сделать, имеет неопределенное поведение .

string s; по умолчанию инициализируется (размер равен нулю), затем вы получаете доступ к элементам, которых там нет.

Чтобы решить эту проблему, вы можете просто использовать string s = "ab"; или

std::string s;
s.push_back('b');
s.push_back('a');

или как предложено @ bindsniper001 (хотя вы не можете добавить к длине строки таким образом):

std::string s2(2, ' ');
s2[0] = 'c';
s2[1] = 'd';

Жить на Годболт

...