4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Строки (strings) в C++26.10.2014, 23:36. Показов 1019. Ответов 5
Метки нет (Все метки)
Здравствуйте, уважаемые программисты!
Прошу помочь нубу-новичку разобраться с некоторыми нюансами программирования на C++. Сишку учу с нуля по книжкам(прямо рэп какой-то!). В данный момент изучаю строки(strings). Насколько я понял, строка в C++ представляет собой массив из ячеек, хранящих значения типа char, то есть, строка есть ни что иное, как массив символов. Для объявления строки используем следующий синтаксис:
String1[0] is: H String1[1] is: e String1[2] is: l String1[3] is: l String1[4] is: o String1[5] is: ! String1[6] is: String2[0] is: H String2[1] is: e String2[2] is: l String2[3] is: l String2[4] is: o String2[5] is: ! String2[6] is: Вопрос: правильно ли я понял, что несмотря на успешную компиляцию и корректную на первый взгляд работу программы, в массив String2 в строке кода 17 записалось лишь два первых символа(H, e) массива String1, а остальные символы(l, l, o, !, /0) записались за пределами массива String1, что является грубейшей ошибкой, а для правильной работы программы необходимо изменить строку кода 16 следующим образом:
0
|
26.10.2014, 23:36 | |
Ответы с готовыми решениями:
5
Строки, Strings Строки «Strings» Получить содержимое строки по содержанию переменной, но не из файла strings.xml Strings |
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
26.10.2014, 23:51 | 2 |
Правильно.
Добавлено через 1 минуту Это Си-строки: массив char с '\0' в конце. В С++ есть класс string - это совсем другое: http://www.cplusplus.com/reference/string/string/
1
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
27.10.2014, 00:16 | 3 |
Alexey104, тебе пока не нужны сишные строки.
Используй std::string и будет счастье. Конечно, в плане просветления о том как пробежаться по массиву массивов массивов на них натренируешься; но сколько копий сломаешь о heap corruption. Например, выделишь память в куче, малось запишешь не свой кусок. Итого программа падает не сразу, а через некоторое время. Часы медитаций в дебаге и над valgrind. Недосып и, в итоге, переход на std::string. А ещё лучше сразу перейди на питон, и желательно третий. Ну вот вряд ли тебе плюсы в жизни пригодятся. Не по теме: это такое моё нытьё
1
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||
27.10.2014, 04:26 [ТС] | 4 | |||||
Во-первых, всем спасибо за участие в моей теме!
Я просто прохожу главу за главой по книжке и, как ты правильно сказал, чисто "для просветления" пишу всякие бесполезные коды, не имеющие практического применения, просто чтобы въехать, как это всё работает. В данный момент изучаю тему "массивы символов". Насколько практично использовать сишные строки, меня пока мало волнует, главное - въехать в тему на уровне молекул, а потом уже выбирать, что практичнее. Что касается питона, то я совсем не против(и даже за) его изучить(или ещё чего), но я уже начал в плюсах, достаточно много красноглазил, переварил кучу информации, насиловал свой мозг классами, ссылками, указателями, массивами, функциями, операторами, кучами и стеками, - не зря же я это всё делал! Когда изучу плюсы, с радостью изучу что-нибудь ещё, если, конечно, мозгов хватит. А по теме хотел бы задать ещё один вопрос: Правильно ли я понял, что функция strncpy не копирует из исходной строки символ '\0', а сама добавляет его после копирования? То есть в строке 17 кода, указанного выше, говорится не "скопировать из строки String1 в строку String2 символы 'H', 'e', 'l', 'l', 'o', '!', '/0'", а "скопировать из строки String1 в строку String2 символы 'H', 'e', 'l', 'l', 'o', '!' и добавить в конце символ '\0'"? Если это верно, значит в строке 16 кода можно изменить 3-й аргумент функции на 6 вместо 7, и это будет корректно? Я имею-в-виду сделать так:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
27.10.2014, 04:49 | 5 |
http://www.cplusplus.com/refer... g/strncpy/
Отладчиком умеете пользоваться? Читаете, пробуете, смотрите: когда и что добавляется.
0
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|
27.10.2014, 18:03 [ТС] | 6 |
alsav22,
с отладчиком я пока, как обезьяна с гранатой, а вот за ссылки спасибо - всё чётко по теме расписано. Сейчас разбираюсь с GDB, а по данной теме вопросов больше не имею. Благодарю за участие!
0
|
27.10.2014, 18:03 | |
27.10.2014, 18:03 | |
Помогаю со студенческими работами здесь
6
For и Strings Strings Huge strings BST of strings How to do this? Array of strings Соединение Strings Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |