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

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

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

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

21.07.2013, 12:34. Просмотров 763. Ответов 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]
Но ничего хорошего не вышло.
Подскажите, как решить данную проблему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 12:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тип string и subscript out of range (C++):

String subscript out of range - C++
Разбираю пример, который дала препод в примерах к лекциям..Пример по коду Виженера.. Пару раз запустился-результат выводился.Исправила...

String subscript out of range - C++
При запуске выдает ошибку &quot;string subscript out of range&quot;. Подскажите, в чем проблема. #include &lt;iostream&gt; #include &lt;string&gt; ...

Ошибка: string subscript out of range - C++
При запуске выдает ошибку &quot;string subscript out of range&quot;. Подскажите, в чем проблема. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Ошибка string subscript out of range - C++
Здраствуйте создал библиотеку, при подключение библиотеки и запуска программи все работает коректно(данние принимаются, обрабативаются,...

Ошибка String subscript out of range - C++
Здравствуйте. Написал на Dev C++ 4.9.9.2 программу которая открывает фаил и кладет все в буфер. Содержание файла: gehen v test*kommen v...

Ошибка: String subscript out of range - C++
Expression: String subscript out of range Консольное приложение. Программа должна перерабатывать построчно текстовый файл с кодом и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.07.2013, 12:37 #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
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
21.07.2013, 12:39  [ТС] #3
Спасибо
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 13:25 #4
Это из-за того что у тебя строка пустая, и символа с индексом 0 не существует.
art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
21.07.2013, 16:28  [ТС] #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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:34 #6
Не требуется - не инициализируй. Но тогда и не обращайся к элементам строки которых нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
21.07.2013, 16:34 #7
А что Вам требуется?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.07.2013, 11:48 #8
Цитата Сообщение от art1535 Посмотреть сообщение
Обращаюсь к отдельному элементу массива:
Для начала стоит понять, что строка (std::string) это уже по сути контейнер, и через оператор "квадратные скобки" Вы получаете доступ к заданному элементу строки, т.е. к символу. Если Вам нужен именно массив символов, а не строка, то логичнее использовать std::vector<char>. А если массив строк, то std::vector<std::string>.
art1535
7 / 7 / 0
Регистрация: 19.02.2013
Сообщений: 76
22.07.2013, 19:17  [ТС] #9
Ведь инициализация подобным образом

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

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

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

Хеш-таблицы: string subscript out of range - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;string&gt; using namespace std; typedef string nametype; struct celltype { ...

и вновь я к вам - string subscript out of range - C++
Смысл того, что делаю, в принципе по комментам кода должно быть понятно - частотный анализ текста. На 38 строке выбивает string subscript...

Исправьте ошибку string subscript out of range - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; int main () { string s = &quot;222/2&quot;; ...

Ошибка expression string subscript out of range - C++
Ребят, уже всю голову разбил... не пойму где здесь может быть ошибка, что я не так сделал???? почему то как обычную строку выводит на...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.07.2013, 19:41
Ответ Создать тему
Опции темы

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