Автор: 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 или его аналоги позволяют манипулировать со строками более широкими и гибкими средствами, а главное сами заботятся об памяти (до определенного предела, конечно).