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

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

Войти
Регистрация
Восстановить пароль
 
Aндерсон_256
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 16
#1

Конкатенация строк в объектах - C++

13.01.2014, 21:56. Просмотров 255. Ответов 3
Метки нет (Все метки)

Программа завершает свою работу в тот момент, когда выполняет нижеприведенный фрагмент кода. Вывода на экран не происходит. Вкратце условия задачи:
Класс String состоит из указателя на строку char*str в private и нескольких функций в public, но вопрос мой касается лишь одной из них.
Определение функции:
C++
1
2
3
4
5
6
7
8
9
10
11
String String::operator+(const String&v)
{
char*temp=new char[strlen(str+1)]; // создаем временный указатель
strcpy(temp,str);
delete [] str;
str = new char [strlen(str)+strlen(v.str+1)];
strcpy(str,temp);
strcat(str,v.str);
delete[]temp;
return *this;
}
код в main() :
C++
1
2
3
4
  String s1(" My name is Mike ");
    String s2 = " and I am a C++ student. ";
    s1=s1+s2;
    cout << s1;
С перегруженным оператором вывода << все в порядке, в других частях кода работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 21:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конкатенация строк в объектах (C++):

Копирование строк в объектах - C++
В методе DeleteMessage() я хочу удалить сообщение путём копирования в него строк из следующего сообщения,ну то есть сдвигая всё это,не...

Конкатенация строк - C++
Нужно объединить три строки: &quot;txt/&quot; + i + &quot;.txt&quot; в char* URL. i переменная в цикле. Сделал так: strcpy(URL, &quot;txt/\0&quot;); ...

Конкатенация строк - C++
Должно быть консольное приложение. Очень простой вопрос, но сам что-то завис, и немогу найти что хочу. Значит так есть такой кусок кода ...

Конкатенация строк s1 и s2 - C++
Есть код консольного приложения. В конце когда ответ, какието символы. Где же что не так?? #include &quot;stdafx.h&quot; #include...

Конкатенация строк - C++
Частью задания является реализовать функцию strcat. Возникает какая-то ошибка (см.фото). 1.Вы могли бы подсказать в чём ошибка? 2.Не по...

Конкатенация строк - C++
Здравствуйте, у меня такая проблема. Имеется переменная типа LPCWSTR мне в нее необходимо сохранить другую переменную типа LPCWSTR и...

3
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
13.01.2014, 21:59 #2
C++
1
2
3
4
5
delete [] str;//<--освободили память
str = new char [
                        strlen(str)//Память уже освобождена и там может быть что угодно
                        +strlen(v.str+1)
                      ];
0
Aндерсон_256
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 16
13.01.2014, 22:18  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
delete [] str;//<--освободили память
str = new char [
                        strlen(str)//Память уже освобождена и там может быть что угодно
                        +strlen(v.str+1)
                      ];
Простите, но я вас не понял. Я полагаю, что освобождая память операцией delete [] str, я тем самым удаляю данные из памяти, на которые указывал str. В моем случае для того, чтобы "склеить" строки из объектов s1 и s2 в s1, нужно в первую очередь поместить в временное хранилище копию строки, на которую указывает указатель вызывающей функции, а уж затем подчищать память. Подправьте, пожалуйста, в моментах, в которых я ошибаюсь.
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
13.01.2014, 22:43 #4
Цитата Сообщение от Aндерсон_256 Посмотреть сообщение
я тем самым удаляю данные из памяти, на которые указывал str.
лишь указываете, что ранее выделенная память более не нужна.
C++
1
2
3
4
5
6
char * temp=new char[strlen(str)+strlen(v.str)+1)]; // создаем временный указатель
strcpy(temp,str);
strcat(temp,v.str);
delete [] str;
str=temp;
return *this;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 22:43
Привет! Вот еще темы с ответами:

Конкатенация строк - C++
Помогите,пожалуйста,идиоту.Не понимаю как правильно конкатенацию строк написать(&quot;сложение&quot; строк) #include &lt;iostream&gt; class...

конкатенация строк - C++
Подскажите, почему не компилируется код: std::string ExtractFileName(std::string filename) { if (filename.size() == 0)...

Конкатенация строк - C++
Разбираю учебный пример - написать класс для работы со строками. Всего два поля: private: int _size; // длина строки, без...

Конкатенация строк - C++
Имеется две строки string1 и string2, мне нужно что бы строка string3 содержала в себе обе, сначало string1, потом string2. Kак это сделать...


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

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

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