C语言中的环形缓冲区/循环数组实现

时间:2018-09-25 15:38:37

标签: c arrays buffer circular-buffer circular-list

以前有很多关于在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循环中解决此问题,该循环可以指向不同的起点。

感谢您提供的所有帮助。如有必要,我可以提供更多详细信息。

0 个答案:

没有答案