![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |||
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]()
Здравствуйте.
Было дано вот такое задание: Цитата:
На лекции было рассказано как выделять память в с и с++ стиле, и про ссылки с указателями. Полученное задание меня обездвижило на минут 30) Почитав коменты к заданию более менее стало понятно что делать. Получился вот такой нерабочий код №1: Код:
В попытках всё переосмыслить был рождён другой нерабочий код №2: Код:
Предполагаю, что у меня где-то серьёзная поломка мозга и абсолютное непонимание задания... ![]() ![]() Ещё не понятен момент, про работу while(cin.get(ch)) Каким образом это работает? Вот я запускаю программу, программа ожидает ввода. Я ввожу некоторые символы и нажимаю ентер. Это получается, что в ch будет содержаться массив с этими символами и цикл запустится 1 раз? Или будет происходить цикл каждый раз когда я нажимаю на клаве символ? Или произойдёт срабатывание цикла столько раз, сколько я ввёл символов, т.е. в условие цикла отправится массив после нажатия ентер? Коментарии, которые возможно помогут понять суть задания(хотя мне не особо помогли): Коментарий преподавателя: Цитата:
Цитата:
![]() ![]() ![]() Забыл добавить: Можно использовать только iostream. Последний раз редактировалось evsign; 27.09.2014 в 21:00. |
|||
![]() |
![]() |
![]() |
#2 | |
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]() Цитата:
После отправки ввода нажатием enter цикл выполняется столько раз, сколько было введено символов. Т.е. по итерации на каждый символ. Только вот почему тогда цикл не завершается, когда я ввожу 0? Чувствую, скоро будет рождён неработающий код №3 )) ![]() |
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]()
На другом форуме мне подсказали, что лучше не делать сразу большой буфер, а создавать новый по мере заполнения начального.
Получился пока ещё не работающий вот такой код Код:
И правильно ли я переписываю старый буфер в новый? |
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]()
Уже не актуально, во всём разобрался)
|
![]() |
![]() |
![]() |
#5 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]()
Почему не всегда это правильно?) Так же вроде более бережно расходываться память будет. Да и размер максимальной строки, которая может быть подана на вход я не знаю)
Эт я с начала не оч понял как работают указатели и вообще запутался в этой теме) Уже разобрался) Получился вот такой, наконец-то рабочий код: Код:
|
![]() |
![]() |
![]() |
#7 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]() Цитата:
Обычно (да почти всегда) на длину строки есть ограничения. Ну например длина сообщения в протоколе ICQ имеет предел в районе 5000 символов. Если бы ты писал консольный клиент аськи - то разумно было бы сделать размер буфера в 5000 символов и считывать нужное количество символов через getline. Если внезапно юзер ввел больше 5000 символов ты, соблюдая протокол, должен все равно разбить его сообщение на 2 (или более) - поэтому юзаешь getline в цикле. Цитата:
Твой код экономит память, но грузит процессор (который выделяет память), копирует старую строку в новую и освобождает память. Выделение и освобождение - это не такой простой процесс как тебе кажется, не стоит делать это часто, как и копировать лишний раз. Ну и ваще, по заданию тебе сказали getline использовать, значит так и надо делать, а не велосипеды строить. |
||
![]() |
![]() |
![]() |
#8 | |
Новичок
Джуниор
Регистрация: 27.09.2014
Сообщений: 6
|
![]() Цитата:
А по заданию как раз и надо было сделать такой велосипед в образовательных целях) По идее вообще memcpy нельзя было даже юзать. |
|
![]() |
![]() |
![]() |
#9 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль. Работа с динамической памятью. | McFrey | Помощь студентам | 1 | 06.04.2012 16:56 |
Работа с динамической памятью через указатели. Загадочная ошибка. | Hqw33 | Общие вопросы C/C++ | 2 | 28.03.2012 18:42 |
Работа с ListBox и Edit и динамической памятью | Serebah | Помощь студентам | 5 | 19.11.2010 13:41 |
Помогите пожалуйста с динамической памятью и указателями | Riddick2013 | Помощь студентам | 1 | 19.12.2007 14:41 |