Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
art1535
 Аватар для art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
#1

Тип string и subscript out of range - C++

21.07.2013, 12:34. Просмотров 741. Ответов 12
Метки нет (Все метки)

Доброго времени дня. Такая проблема.

Обращаюсь к отдельному элементу массива:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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

Пробовал указать размер массива, таким образом
C++
1
string line[5]
Но ничего хорошего не вышло.
Подскажите, как решить данную проблему
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.07.2013, 12:37     Тип string и subscript out of range #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
int main()
{
    string line(5, ' ');
    line[0] = 'c'; 
    cout << line << endl;
    _getch();
}
art1535
 Аватар для art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
21.07.2013, 12:39  [ТС]     Тип string и subscript out of range #3
Спасибо
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 13:25     Тип string и subscript out of range #4
Это из-за того что у тебя строка пустая, и символа с индексом 0 не существует.
art1535
 Аватар для art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
21.07.2013, 16:28  [ТС]     Тип string и subscript out of range #5
lazybiz, да, это я понимаю, просто как решить не знал

Добавлено через 43 секунды
Добавлено через 2 часа 56 минут
И использовать конструкцию такого типа

C++
1
string line(5, ' ');
можно в любом месте кода,как я понимаю

C++
1
2
3
4
5
6
...
           string str;
 
    cin >> str;
           string out_str( str.size(), '-' );
...
Допустим, если мне при объявлении инициализация не требуется
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:34     Тип string и subscript out of range #6
Не требуется - не инициализируй. Но тогда и не обращайся к элементам строки которых нет.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12512 / 7074 / 794
Регистрация: 27.09.2012
Сообщений: 17,466
Записей в блоге: 2
Завершенные тесты: 1
21.07.2013, 16:34     Тип string и subscript out of range #7
А что Вам требуется?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.07.2013, 11:48     Тип string и subscript out of range #8
Цитата Сообщение от art1535 Посмотреть сообщение
Обращаюсь к отдельному элементу массива:
Для начала стоит понять, что строка (std::string) это уже по сути контейнер, и через оператор "квадратные скобки" Вы получаете доступ к заданному элементу строки, т.е. к символу. Если Вам нужен именно массив символов, а не строка, то логичнее использовать std::vector<char>. А если массив строк, то std::vector<std::string>.
art1535
 Аватар для art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
22.07.2013, 19:17  [ТС]     Тип string и subscript out of range #9
Ведь инициализация подобным образом

C++
1
string out_str( str.size(), '-' );
возможна ведь только при непосредственном объявлении?

Так ведь нельзя делать?

C++
1
2
3
4
5
6
7
8
string str;
 
int main()
{
....
str( 5, ' ' );
....
}
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2013, 19:20     Тип string и subscript out of range #10
C++
1
str.assign(5, ' ');
art1535
 Аватар для art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
22.07.2013, 19:37  [ТС]     Тип string и subscript out of range #11
C++
1
2
3
4
5
6
...
           string str;
 
           cin >> str;
           string out_str( str.size(), '-' );
...
Хочу еще про этот момент спросить. Ведь объявление объектов желательно в начале ведь верно? То есть здесь лучше использовать метод assign() ? Возможно, вопрос немного глупый.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
22.07.2013, 19:39     Тип string и subscript out of range #12
Цитата Сообщение от art1535 Посмотреть сообщение
Ведь объявление объектов желательно в начале ведь верно?
Для С++ не верно. Где требуется там и стоит объявлять. Т.е. по надобности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 19:41     Тип string и subscript out of range
Еще ссылки по теме:

C++ String subscript out of range
C++ Ошибка expression string subscript out of range
C++ Ошибка при быстрой сортировке файла: "string subscript out of range"
C++ Debug Assertion Failed! Expression: string subscript out of range
C++ Debug assertion failed : string subscript out of range

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2013, 19:41     Тип string и subscript out of range #13
Цитата Сообщение от art1535 Посмотреть сообщение
Ведь объявление объектов желательно в начале ведь верно?
нет
Yandex
Объявления
22.07.2013, 19:41     Тип string и subscript out of range
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru