我正在尝试获取程序中输入的最后 10 个命令。我遇到的问题是我从命令行获取参数并将其存储到我的数组中,但我一直在我的数组中写入值,因为它们存储的是指针而不是实际的字符数组值。我想知道如何获取当前字符数组(将随着输入的每个命令而改变)并将该值存储到一个数组中。我知道这是一个指针问题,但我不确定如何解决这个问题
我的代码如下。我的 char 数组 history[] 如下所示,输入如下:
输入 a 历史[0] = a 输入 b 历史[0] = b 历史[1] = b 输入 c 历史[0] = c 历史[1] = c 历史[2] = c
#define MAX 256
#define CMD_MAX 10
#define HISTORY_MAX 10
int make_history(char *history[], int history_counter, char *input_line)
{
if(history_counter < HISTORY_MAX)
{
history[history_counter] = input_line;
}
return 1;
}
int make_tokenlist(char *buf, char *tokens[])
{
char input_line[MAX];
char *line;
int i,n;
i = 0;
line = buf;
tokens[i] = strtok(line, " ");
do
{
i++;
line = NULL;
tokens[i] = strtok(line, " ");
}
while(tokens[i] != NULL);
return i;
}
int main()
{
char input_line[MAX], *tokens[CMD_MAX], *history[HISTORY_MAX];
int i, n, history_counter;
while(1)
{
printf("abc> ");
if (gets(input_line) != NULL)
{
n= make_tokenlist(input_line, tokens);
}
else
{
printf("error?");
return 1;
}
make_history(history,history_counter,input_line);
if(strcmp(tokens[0],"history")==0)
{
for (i = 0; i < HISTORY_MAX; i++)
{
if(history[i]!=NULL)
{
printf("%d. %s \n", i, history[i]);
}
}
}
for (i = 0; i < n; i++)
{
printf("extracted token is %s\n", tokens[i]);
}
history_counter++; //increment history counter
}
}