C ++ массив указателей на символы - не может получить доступ к элементам - PullRequest
0 голосов
/ 06 ноября 2011

У меня возникли проблемы с хранением некоторых указателей на символы в моем массиве

Метод должен принимать массив char * и указатель int, который является размером массива.Затем я зацикливаюсь и прошу пользователя ввести имена.Тогда я хочу напечатать их;однако кажется, что в моем массиве ничего нет.

Примечание. Я не могу использовать нотацию массива для этого назначения, я должен использовать нотацию указателя для доступа к элементам массива.

Ответы [ 5 ]

5 голосов
/ 06 ноября 2011
    char* current = new char[str.size() + 1];
    *(name + i) = current;

Вы правильно выделяете новую память для каждого из элементов массива, но никогда не присваиваете им значения.Поскольку это домашнее задание, я не буду больше говорить.

1 голос
/ 06 ноября 2011

Вы должны на самом деле скопировать строку, а не просто выделить место для копии.Попробуйте это:

int length=str.copy(current,str.size(),0);
current[length]='\0';

сразу после выделения строки.Т.е. поместите приведенный выше код сразу после этой строки в ваш код:

char* current = new char[str.size() + 1];
1 голос
/ 06 ноября 2011

Вы забыли скопировать введенную пользователем строку в массив.Нет копии с str на текущий.

0 голосов
/ 06 ноября 2011

добавьте вторую строку: (и #include "stdio.h")

char* current = new char[str.size() + 1];
strcpy(current , str.c_str());
(name + i) = current;

это должно работать.

Вы используете "int * items", его лучше использовать "int items ".я бы написал «имя [я]» вместо «* (имя + я)».и если вы знаете максимальный размер строк, которые вы хотите разрешить, если это n, вы можете написать:

for(int i=0; i<*items; i++)
{   
   cout << "Enter name #" << (i+1) << ": "; 
   name[i] = new char[n];
   cin.getline( name[i] , n);
}
0 голосов
/ 06 ноября 2011

Если вы хотите сделать это, вам нужно скопировать фактическую запись.
проверьте strcpy или memcpy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...