c - C:将 getline() 创建的字符串存储在链接列表中?
问题描述
我需要在 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()
新行时将被分配。
推荐阅读
- android - 如何在不更改其他布局的情况下更改 RecyclerView 中的单个项目
- php - 使用 $_SESSION php 的多级导航栏
- asp.net - Asp.net Webforms:为 typeform 创建 webhook 接收器
- powershell - 使用 FileSystemWatcher 在多个文件同时更改时发出警报
- python - Holoviews 热图 X 轴格式
- asp.net-mvc - .net 4.7 中的依赖注入?
- javascript - 如何使用 vanilla JavaScript 更改此 SVG 精灵的 href?
- python - 如何将 tkinter 按钮与标签和输入框保持在同一行
- snakemake - Snakemake 规则仅针对一个文件运行
- python - 在 Python 中读取 n qty 行分隔的 txt 文件