C ++ Массив символов * проблема копирования - PullRequest
0 голосов
/ 30 ноября 2018

Я изучаю указатель на указатели в C ++.Мы используем массив char* вместо vector<string>, чтобы узнать, как это работает.Я пытаюсь создать массив char* длиной 3 и скопировать строки из массива const char* следующим образом:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];
strcpy(new_array[0], strings[0]);

Я включил заголовок <string.h>, но все еще получаю сегментациюнеисправность.

edit: из того, что мне сказали люди, мне нужно назначить адрес каждому указателю, что имеет смысл.Есть ли способ, которым я могу назначить адрес каждому, с которого я могу начать писать?Я понимаю, что могу писать за границей, но если это не сработает, это нормально, потому что это всего лишь учебное упражнение для другой концепции.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Ни одному из указателей в new_array не назначена какая-либо память - вы записываете в произвольное место в памяти (неопределенное поведение).

0 голосов
/ 30 ноября 2018

Ни один из указателей в вашем целевом массиве не указывает на выделенную память.Вам необходимо выделить память для строк, прежде чем вы сможете strcpy() вставить в них, например:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];

for(int i = 0; i < 3; ++i)
{
    new_array[i] = new char[strlen(strings[i])+1];
    strcpy(new_array[i], strings[i]);
}

...

for(int i = 0; i < 3; ++i)
{
    delete[] new_array[i];
}

или:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];

for(int i = 0; i < 3; ++i)
{
    new_array[i] = strdup(strings[i]);
}

...

for(int i = 0; i < 3; ++i)
{
    free(new_array[i]);
}
0 голосов
/ 30 ноября 2018

Для каждой из строк в вашем массиве new_array вам необходимо выделить память для строки.Прямо сейчас каждый из этих трех указателей неинициализирован, поэтому вы получаете неопределенное поведение.

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