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

问题描述 投票:0回答:1

我需要在C中执行grep的自己的实现。我正在使用getline()从文件中读取(这是用户指定的,如果不是,则从stdin中读取)。

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的副本。

c string linked-list grep getline
1个回答
0
投票

一旦将line存储到列表中(就像列表中存储指针值一样,只需设置line = NULL;,以便下次单击getline()时将分配新的一行。

© www.soinside.com 2019 - 2024. All rights reserved.