C:将 getline() 创建的字符串存储在链表中?

C: Store strings created by getline() in a Linked list?

我需要在 C 中自己实现 grep。我正在使用 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 的副本。

一旦你将 line 存储到列表中(因为在列表中存储指针值),只需设置 line = NULL; 以便下次你点击 getline() 一个新的线路将被分配。