以前有很多关于在C中实现循环缓冲区的文章和示例,但我很多都包含结构,对于我要完成的任务来说,这有点太复杂了。
任务比较简单,可以打印出用户输入的最后10条命令,类似于bash函数" 1"
。我的代码如下:
history
此实现有两个主要问题。一个是这样的历史,即使用户仅输入了少于10个命令,历史记录也将产生最多10个值-可以用void make_history(char **entry) {
static char past_entries[10][10];
static int index = 0;
int sz = sizeof(past_entries)/sizeof(past_entries[0]);
if(strcmp(entry, "history") != 0) {
strcpy(past_entries[index], *entry);
index = (index + 1) % sz;
}
for(int i = 0; i < sz; i++) {
printf("%d. %s", i+1, past_entries[i % sz]);
}
}
循环来修复。
第二个问题是,尽管缓冲区将在达到10的值后回绕,但不会更新最新的输入命令。同样,可以从for
循环中解决此问题,该循环可以指向不同的起点。
感谢您提供的所有帮助。如有必要,我可以提供更多详细信息。