![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]()
Задача: Есть 2 строки. Вторую надо скопировать в первую. предварительно их передать в функцию и выделить новую память для первой строки.
Мой код работает, но, во-первых, не пойму почему не могу удалить память в функции перед тем как выделить новую? и во-вторых, в конец итоговой строки дописывает еще 9 символов "мусора". Подскажите в чем ошибка. Код:
Последний раз редактировалось marenko.lilia; 25.12.2013 в 16:21. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
char *str1 = new char [(strlen("строка 1") + 1)] = "строка 1";
Это что, по вашему? Так строки не копируются, воспользуйтесь strcpy() |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 19.12.2011
Сообщений: 28
|
![]()
А 21 и должно вывести, ибо:
Код:
![]() Чуток "причесанный" код: Код:
Код:
Последний раз редактировалось andreil; 25.12.2013 в 17:04. |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 19.12.2011
Сообщений: 28
|
![]() Цитата:
В какой среде собираете? Я использую дефолтный GCC, а у Вас, наверное MSVC какой-нибудь ![]() |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]()
Спасибо, andreil!
но опять же в итоге cout << strlen(str1) <<endl; не 20, как нам надо, а 31 показывает и "мусор" остался. 1)строка 1 2) + строка 2 копия str: строка 1 newSize=20 Итоговая строка: строка 1 + строка 2Нээээ\Х4V`.☻ 31 Для продолжения нажмите любую клавишу . . . Последний раз редактировалось marenko.lilia; 25.12.2013 в 17:16. |
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]() Цитата:
после того, как ты изменил код - память удалилась нормально! Наверное причина была в том одном '\0'... сейчас буду разбираться Последний раз редактировалось marenko.lilia; 25.12.2013 в 17:18. |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 19.12.2011
Сообщений: 28
|
![]()
Добавь перед выводом:
Код:
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]()
andreil, вот я прямо беру твой код копирую, запускаю и ...
1)строка 1 2) + строка 2 копия str: строка 1 newSize=20 Итоговая строка: строка 1 + строка 2Нээээ\Х4V`.☻ 31 Для продолжения нажмите любую клавишу . . . |
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
![]() Цитата:
но это и правда немного неправильно |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
написать фрагмент программы выделения памяти для 2-мерного массива из N строк ( С++ ) | Niklitel | Помощь студентам | 4 | 15.11.2013 16:12 |
Макрос для вставки новой строки | Maiku | Microsoft Office Excel | 6 | 15.03.2013 18:28 |
Не могу сделать функцию для строки | Донат | Общие вопросы C/C++ | 1 | 07.12.2011 20:08 |
Функции для выделения, перераспределения и освобождения памяти | ArtGrek | Общие вопросы Delphi | 9 | 14.03.2011 03:08 |
Новый двухкнопочный калькулятор для новой операционной системы. Пишем новые программы для BolgenOS. | Ecosasha | Софт | 16 | 06.06.2010 13:32 |