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

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

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

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

31.08.2012, 03:56. Просмотров 345. Ответов 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. Просто вышеназванныё способ мне кажется некрасивым
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2012, 03:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как динамически иницилизировать char * "статическими" данными? (C++):

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" - C++
string s = "555 44 55 66";//размер строки заранее неизвестен char* p = strtok(s.c_str(), ' '); не нравится такое...

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" - C++
for(int i = 0; i< 5; i++) { wr_struc (list); if (strcmp(&list.Sostav,osn_sostav)==0 && strcmp(&list.MestoVkomande,attack)==0...

IntelliSense: несовместимые типы операндов ("char" и "const char *") - C++
привет всем! при таком коде: void main() { ifstream fin; ofstream fout; fin.open("input.txt"); ...

Не открывается библиотека 'stdafx.h' и "char" не работает с параметром "char*" - C++
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <cstring> using namespace std; int one(char fam) //...

Невозможно преобразовать параметр 2 из "char" в "const char *" - C++
Ошибка strcpy: невозможно преобразовать параметр 2 из "char" в "const char *" //удаления из первой строки всех символов, встречающихся...

Несовместимые типы операндов "char" и "const char*" - C++
В чем проблема?

5
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
31.08.2012, 04:13 #2
C
1
str = strdup("my default str");
?
1
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
31.08.2012, 04:23  [ТС] #3
Спасибо, судя по описанию то что нужно
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2012, 11:05 #4
strdup требует вызова free, а не delete
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
31.08.2012, 13:11 #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

Не по теме:

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

0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.08.2012, 13:16 #6
а это обязательно нужно ручками делать? использование string напрашивается.
0
31.08.2012, 13:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2012, 13:16
Привет! Вот еще темы с ответами:

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include <iostream> template<typename T> inline const T...

Ошибка "error C2446: :: нет преобразования "int" в "char *" - C++
Ошибка: "error C2446: :: нет преобразования "int" в "char *" Когда нажимаю двойным кликом на ошибку меня перекидывает в файл...

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" - C++
int f(unsigned char s, unsigned char q) { N = strlen(s); //Ошибка тут... M = strlen(q); //...и тут Как исправить?

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата" - C++
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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