我在 C 中定义了以下内容:
#define MAX_COMMANDS 10;
char * commandHistory[MAX_COMMANDS][MAX_LENGTH + 1];
我的想法是跟踪在我的自定义 shell 中输入的最后 10 个命令。我只想跟踪最近的 10 个命令。每个命令都需要与一个数字 1、2、3、4 等相关联,这样我以后就可以使用 !83(例如)重新执行第 83 个输入的命令。
因此,在我的命令历史记录如下所示之前,我都很好:
commandHistory = [cmd0, cmd1, cmd2, ... , cmd9]
我还有一个用于索引的变量 i,当输入下一个命令时,它的值为 10
在这一点上我完全没问题。 shell上输入下一个cmd怎么办。我需要 commandHistory 看起来像这样:
commandHistory = [cmd1, cmd2, cmd3, ... , cmd10]
但我还需要能够打印他们的命令 + 编号,因此第 10 个输入的命令将打印为 10 cmd10。我还需要能够稍后从我的 shell 调用 !10 并执行该命令(如果给定的命令是仍然记得的 10 个命令之一)。
我需要帮助,因为我不确定如何解决这个问题。谢谢
最佳答案
我个人会使用指针数组并跟踪动态内存。减少内存使用并使元素从末端掉落更加直接。
显然未经测试,我没有仔细研究它以确保我没有因一个错误或其他原因而关闭,但一般概念应该非常清楚。
char commandHistory[MAX_COMMANDS][MAX_LENGTH+1];
int histSize = 0;
int histBase = 0;
void addHistory(const char *cmd)
{
if (++histSize >= MAX_COMMANDS)
{
for(int x=1;x<MAX_COMMANDS;x++)
memcpy(commandHistory[x-1],commandHistory[x],(MAX_LENGTH+1));
histSize--;
histBase++;
}
memcpy(commandHistory[histSize],cmd,MIN(strlen(cmd),MAX_LENGTH));
}
char *gethistory(int num)
{
int offset = num - histBase;
if (offset < 0 || offset > histSize)
return(NULL);
return(commandHistory[offset]);
}
关于c - 在 C 中更新多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29483089/