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

Как динамически иницилизировать char * "статическими" данными? - C++

Восстановить пароль Регистрация
 
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
31.08.2012, 03:56     Как динамически иницилизировать char * "статическими" данными? #1
Можно с применением стандарта C++11, если что.
Есть конструктор, который принимает параметр в виде char * и копирует его во внутреннее поле, но может в процессе работы урезать строку, но никак не расширять
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Dummy
{
public:
   char * str;
   Dummy(const char *simplStr)
   {
      if (simplStr == nullptr)
      {
         str = "my default str";
      }
   }
   ~Dummy()
   {
      if (str)
         delete str;
   }
};
Вопрос, как сделать так, чтобы память под str в строке 9 выделялась бы динамически?(чтобы деструктор работал корректно) Есть ли какие-нибудь способы, кроме обьявлении статической const char * строки-> выделении памяти под str, так чтобы вместилась статическая строка->копирование статической строки в str. Просто вышеназванныё способ мне кажется некрасивым
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2012, 03:56     Как динамически иницилизировать char * "статическими" данными?
Посмотрите здесь:

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" C++
C++ invalid conversion from "const char*" to "char"
C++ IntelliSense: несовместимые типы операндов ("char" и "const char *")
error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" C++
error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.08.2012, 04:13     Как динамически иницилизировать char * "статическими" данными? #2
C
1
str = strdup("my default str");
?
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
31.08.2012, 04:23  [ТС]     Как динамически иницилизировать char * "статическими" данными? #3
Спасибо, судя по описанию то что нужно
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2012, 11:05     Как динамически иницилизировать char * "статическими" данными? #4
strdup требует вызова free, а не delete
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.08.2012, 13:11     Как динамически иницилизировать char * "статическими" данными? #5
C++
1
2
3
4
5
6
7
8
9
10
Dummy(const char *simplStr = "my default str" )
   : str( new char [ std::strlen( simplStr ) + 1 ])
{
   std::strcpy( str, simplStr );
}
~Dummy()
{
   //if (str) - проверка не нужна, так как это все равно делает оператор delete
   delete [] str;
}
Добавлено через 45 минут
Цитата Сообщение от Toshkarik Посмотреть сообщение
Jupiter; Сегодня в 12:46. Причина: use delete [], Luke

Не по теме:

Извиняюсь, тупо скопипастил, и не обратил внимание

novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.08.2012, 13:16     Как динамически иницилизировать char * "статическими" данными? #6
а это обязательно нужно ручками делать? использование string напрашивается.
Yandex
Объявления
31.08.2012, 13:16     Как динамически иницилизировать char * "статическими" данными?
Ответ Создать тему
Опции темы

Текущее время: 03:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru