Тип string и subscript out of range

Доброго времени дня. Такая проблема. Обращаюсь к отдельному элементу массива:
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
int main()
{
    string line;
 
    line[0] = 'c';
    cout << line << endl;
    _getch();
}
Соответственно, при запуске программы возникает окно, сообщающее об ошибке: string subscript out of rangeПробовал указать размер массива, таким образом
string line[5]
Но ничего хорошего не вышло. Подскажите, как решить данную проблему
12 ответов

#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
int main()
{
    string line(5, ' ');
    line[0] = 'c';
    cout << line << endl;
    _getch();
}


Спасибо


Это из-за того что у тебя строка пустая, и символа с индексом 0 не существует.


lazybiz, да, это я понимаю, просто как решить не зналИ использовать конструкцию такого типа
string line(5, ' ');
можно в любом месте кода,как я понимаю
...
           string str;
 
    cin >> str;
           string out_str( str.size(), '-' );
...
Допустим, если мне при объявлении инициализация не требуется


Не требуется - не инициализируй. Но тогда и не обращайся к элементам строки которых нет.


А что Вам требуется?


Обращаюсь к отдельному элементу массива:
Для начала стоит понять, что строка (std::string) это уже по сути контейнер, и через оператор "квадратные скобки" Вы получаете доступ к заданному элементу строки, т.е. к символу. Если Вам нужен именно массив символов, а не строка, то логичнее использовать std::vector. А если массив строк, то std::vector.


Ведь инициализация подобным образом
string out_str( str.size(), '-' );
возможна ведь только при непосредственном объявлении?Так ведь нельзя делать?
string str;
 
int main()
{
....
str( 5, ' ' );
....
}


str.assign(5, ' ');


...
           string str;
 
           cin >> str;
           string out_str( str.size(), '-' );
...
Хочу еще про этот момент спросить. Ведь объявление объектов желательно в начале ведь верно? То есть здесь лучше использовать метод assign() ? Возможно, вопрос немного глупый.


Ведь объявление объектов желательно в начале ведь верно?
Для С++ не верно. Где требуется там и стоит объявлять. Т.е. по надобности.


Ведь объявление объектов желательно в начале ведь верно?
нет