Скопировать строку из указателя в индекс в массиве указателей - PullRequest
0 голосов
/ 26 сентября 2018

Как указано в заголовке, я хотел скопировать строку из указателя char в расположение в массиве char указателей.При выполнении strcpy() вывод приводит к ошибке seg, но не понимаю, почему это происходит.

Сокращенный код имеет следующее:

void make_history(char *entry) {
    //static char past_entries[10][10];
    static char *past_entries[10];
    static int index = 0;
    static int array_index = 0;

    char *input;
    if((input = strchr(entry, '\n')) != NULL)
        *input = '\0';

    if(strcmp(entry, "history") != 0) {
        strcpy(past_entries[index], entry);
        *past_entries[index] = &entry;
        index = (index + 1) % 10;
        array_index++;
    }
}

Вместо попытки вернуть2d массив (что тоже очень сложно), я подумал, что будет проще скопировать дату из entry в расположение в массиве указателей past_entries.Опять же, strcpy не работает, есть ли веская причина, по которой это происходит, и возможный обходной путь или решение этого исправления?

Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

В вашем примере past_entries - это просто массив указателей, но вы не выделяете им память (изначально указывая на NULL).Затем вы пытаетесь написать в эти места, отсюда и сбой.

Чтобы решить эту проблему, просто выделите некоторую память, прежде чем пытаться скопировать в нее свою строку:

past_entries[index] = malloc(strlen(entry) + 1);

Конечно, вы не должны забыть все это в конце.

Да, удалите эту строку: *past_entries[index] = &entry;.Он пытается присвоить указатель на массив символов на символ .

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