C: Сохранить строки, созданные getline () в связанном списке? - PullRequest
0 голосов
/ 02 ноября 2019

Мне нужно сделать мою собственную реализацию grep в C. Я использую getline () для чтения из файла (если это указано пользователем, если нет, он читает из стандартного ввода).

char* line = NULL; 
size_t size = 0;
int q = 101; //Prime number for Rabin-Karp Algorithm
bool coincidence;
list_t* list = list_create();
while((getline(&line, &size, file)) > 0 && list) {
    list_insert_end(list, line);
    if (list_length(list) > n + 1) list_erase_first(list);
    coincidence = search(string, line, q);
    if (coincidence){
        while (!list_is_empty(list)) printf("%s", (char*) list_erase_first(list));
    }
}
free(line);

У меня сейчас такой код. Я создаю строку char *, которая будет заменена строкой, полученной getline (). Затем я пытаюсь сохранить его копию в списке (или очереди), однако всякий раз, когда я снова использую getline, все сделанные мной копии будут заменены. Мне нужно сохранить копии предыдущих n строк, прежде чем найти совпадение, и когда я это сделаю, я должен распечатать их. Я думал об использовании strdup, но это будет иметь те же результаты. Я думал об использовании массива, но я не мог придумать правильную реализацию, так как я не могу сохранить все строки в памяти, поэтому, когда я достигаю n + 1 строк чтения без совпадений, я должен стереть и заменить первыйтот, который был сохранен. Очередь или список сделали бы это намного проще, но я не могу правильно сохранить копии getline.

1 Ответ

2 голосов
/ 02 ноября 2019

Как только вы сохранили line в списке (так как в списке хранится значение указателя), просто установите line = NULL;, чтобы при следующем нажатии getline() была выделена новая строка.

...