c - 在 C 中更新多维数组

标签 c arrays shell multidimensional-array

我在 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/

相关文章:

c++ - 如何检查数组索引是否存在

javascript - JavaScript 性能中的空数组测试

linux - 在 su 命令期间调用时如何隐藏密码?

shell - bash/shell 脚本不读取第二个参数

shell - 编写一个 shell 脚本来将作业添加到 cron

c - 如何从 pthread_join() 获取错误代码?

c - 头文件中同名的宏和函数

增加 C 中自动数组的大小后出现编译器错误

java - C 中变量和指针的区别(针对 Java 开发人员)?

c - 在C中一次将数字放入数组中