【发布时间】:2021-02-07 17:46:23
【问题描述】:
这是我的问题:我正在构建自己的 shell,并实现了一个历史函数,唯一的问题是历史数组只能取 100 个值,最后 100 个值意味着当它超过 100 时,第一个值得到删除后,每个值都向后移动一个索引,最后一个值获得第 100 位。我唯一的问题是,无论我尝试什么,我的程序的其余部分都会开始出现问题(因此注释行)有什么方法可以使它工作?
这是我的代码:
void hist_add(const char *cmd)
{
if(history_counter<100){
strcpy(history_array[history_counter].command_stored, cmd);
history_array[history_counter].command_number = 1111;
history_counter++;
}
// else {
// for(int j=0;j<100;j++){
// strcpy(history_array[j].command_stored, history_array[j+1].command_stored);
// }
// strcpy(history_array[history_counter].command_stored, cmd);
// history_array[history_counter].command_number = 1111;
// history_counter++;
// }
}
P.S:到目前为止,每个命令的 command_number 都是 1111,因为我接下来要实现它。
【问题讨论】:
-
所以我应该让它循环直到它达到 99?
-
正在写答案,请稍候。
-
我的建议是不要移动元素。而是使用模运算让计数器(数组索引)再次从
99环绕到0。当然,在历史记录中倒退时需要一个特殊情况(从0到99),但通常这比每次向历史记录中添加新命令时都移动每个元素更容易(而且工作量要少得多)。
标签: arrays c shell for-loop history