Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (18.08.2012 в 07:49)
В случае char * автоматом ничего не получится... вам придется выделить память под каждый новый элемент, а потом не забыть её удалить. Причем выделить память лучше заранее.. char * arr[] - это фактически charr arr[][] - т.е. у вас массив строк, а каждая из строк сама является массивом символов char. Т.е. это даже не матрица, это массив переменной длины, элементы которого сами являются массивами переменной длины. Т.е. захотели положить в такую переменную строки, сначала сосчитали сколько их будет, потом выделили память под char **, затем вычислили сколько в первом элементе student["name"] символов выделили память под char * arr[0], перешли ко второй строке - тоже самое выделили память под char *arr[1]. Поработали со строками и в идем обратном порядке - возвращаем память сначала каждой строки, а в конце память под массив char**.

Программировать под C++ очень весело, дорого, времязатратно и код подвержен частым ошибкам. Зато вы контролируете каждый байт. Поэтому существуют более сложные реализации строк, с которыми бы и следовало бы работать... вот этот student["name"] откуда взялся и какой тип он имеет? Ведь в C++ довольно много типов строк, реализованных в виде классов (вы и сами можете ввести свой собственный тип строк), существует стандартный класс CString - вот он как раз и имеет метод c_str(), который в любой момент позволяет получить char *. Однако, вам возможно, работать на уровне char * вообще не нужно... Ведь CString или его аналоги позволяют манипулировать со строками более широкими и гибкими средствами, а главное сами заботятся об памяти (до определенного предела, конечно).


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: