Вниз  C / C++
- 3.10.2015 / 16:38
Naik
  Пользователь

Naik 
Сейчас: Offline
На windows 7 не понимает кодировки utf-8 в cmd, сохранил исходник в windows-1251, перестал выводиться лог в консоль SublimeText, но скомпилилось таки. Кириллица отображается, но не отображается буква і Локаль ставил ( setlocale(LC_ALL, "") ), шрифт в cmd менял - не помогло

Изменено Naik (3.10 / 16:38) (всего 2 раза)
- 5.10.2015 / 17:00
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Открыть спойлер

При удалении t выбивает ошибку того что память была очищена, BLOCK_TYPE_IS_VALID(phead->nBlockUse), нужен конструктор копирования как я понял а вот как сделать не знаю. Знает кто ?

Изменено Banschey (5.10 / 17:01) (всего 1 раз)
- 5.10.2015 / 17:18
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Понял в чем проблема, сама конструкция не правильная.
- 5.10.2015 / 17:30
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Но суть задание в этом:
Создайте класс ,
который динамически выделяет память под строку.
Сама строка задается как параметр конструктора.
Для выделения памяти используйте операторы new и delete.
- 5.10.2015 / 17:30
Naik
  Пользователь

Naik 
Сейчас: Offline
Banschey, конструктор копирования — обычный конструктор, который принимает (const strtype &s)
может можно и без const

p.s. концепция правильная, только это лишнее char *t = new char[]; можно просто char *t;

  И я бы поменял в конструкторе массив на обычный указатель, так код понятнее, имхо

Изменено Naik (5.10 / 17:34) (всего 2 раза)
- 5.10.2015 / 17:38
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Naik, можно пример ? :)
Просто нужно удалить этот массив, но выдает что он уже был удален, значит обращение было к тому что переданно в конструктор а не к новому массиву.

Изменено Banschey (5.10 / 17:40) (всего 1 раз)
- 5.10.2015 / 17:44
Naik
  Пользователь

Naik 
Сейчас: Offline
Banschey, надо скопировать строку в конструкторе в новую область памяти
- 5.10.2015 / 17:47
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Вот как это сделать ? ) не знаю
- 5.10.2015 / 17:53
Naik
  Пользователь

Naik 
Сейчас: Offline
Banschey,
  1. #include <cstring>
  2. #include <iostream>
  3.  
  4. class Holder {
  5.  
  6.     char *str;
  7.  
  8. public:
  9.  
  10.     Holder() : str(0) {} // default constructor
  11.  
  12.     Holder(char *str) {
  13.         this->str = new char[strlen(str) + 1];
  14.         strcpy(this->str, str);
  15.     }
  16.  
  17.     ~Holder() {
  18.         if (str) delete [] str;
  19.     }
  20.  
  21.     // const чтобы нельзя было делать такой фигни holder.getString()[0] = 'B';
  22.     const char* getString() {
  23.         return str;
  24.     }
  25.  
  26. };
  27.  
  28. int main(int argc, char const *argv[]) {
  29.     Holder holder("Testovaya stroka");
  30.     std::cout << holder.getString();
  31.     return 0;
  32. }

Только вот преобразование строки в указатель объявлено устаревшим
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

Изменено Naik (5.10 / 18:03) (всего 4 раза)
- 5.10.2015 / 18:37
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Naik , всё работает спс ) чтоб работала нужно в начале прописать #pragma warning(disable : 4996)
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)