【发布时间】:2015-06-11 13:09:22
【问题描述】:
我在 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 个命令之一)。
我需要帮助,因为我不知道如何解决这个问题。谢谢
【问题讨论】:
-
commandHistory,按照定义,创建一个指向字符的二维指针数组(嗯,从技术上讲,它做了其他事情,但从社会上讲,这就是它的作用)。我假设 MAX_LENGTH 是行的长度,并且您想存储 MAX_COMMANDS 行。因此,您不应将
char*s 存储在这些元素中,而应将chars 存储在这些元素中。如果您正在进行动态分配,您将删除第二个数组并保留 char*s。
标签: c arrays shell multidimensional-array