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

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

Войти
Регистрация
Восстановить пароль
 
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

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

31.08.2012, 03:56. Просмотров 333. Ответов 5
Метки нет (Все метки)

Можно с применением стандарта 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 * "статическими" данными?
Посмотрите здесь:

C++ Невозможно преобразовать "const char" в "char"
Как избавиться от "deprecated conversion from string constant to ‘char*’" C++
C++ cannot convert "char *" to "char"....
C++ Ошибка: "invalid conversion from char* to char"
char *p; p="Help"; cout << p[0]; А как вывести адрес? C++
C++ invalid conversion from "const char*" to "char"
"const char" в "int" C++
C++ C++ ошибка "Cannot convert 'char *' to char"
Программа позволяющая пользователю "динамически" изменять параметры окружения C++
C++ Чтение файла с данными типа real. Тип real в билдере или как его "обойти"?
"динамически выделяет массив указателей на базовый класс" - как это понять? C++
C++ Несовместимые типы операндов "char" и "const char*"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
31.08.2012, 04:13     Как динамически иницилизировать char * "статическими" данными? #2
C
1
str = strdup("my default str");
?
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
31.08.2012, 04:23  [ТС]     Как динамически иницилизировать char * "статическими" данными? #3
Спасибо, судя по описанию то что нужно
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2012, 11:05     Как динамически иницилизировать char * "статическими" данными? #4
strdup требует вызова free, а не delete
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
550 / 503 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.08.2012, 13:16     Как динамически иницилизировать char * "статическими" данными? #6
а это обязательно нужно ручками делать? использование string напрашивается.
Yandex
Объявления
31.08.2012, 13:16     Как динамически иницилизировать char * "статическими" данными?
Ответ Создать тему
Опции темы

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