我读取了char*
中保存的C命令(所以基本上是"字符串"命令)逐字节。
例如," echo a; echo b"。
假设我有char *wd = (char *)malloc(20);
,当我读取一个字节时,存储在wd[i]
中。如果我看到',wd[0]='e'
,wd[1]='c'
,wd[2]='h'
,wd[3]='o'
,wd[4]='\0'
。
我有char **wrd=(char**)malloc(sizeof(char*)*20);
,我设置wrd[0]=wd;
。然后,重复为wd
再次分配空间的循环。设置wd[0]='a'
,wd[1]='\0'
和wrd[1]=wd;
然后我将wrd[0]
和wrd[1]
合并到struct command
:
struct command
{
union
{
char **word;
} u;
};
组合代码:
wrd[wIndex]='\0';
//initialize struct command called cmd
cmd->u.word=NULL;
cmd->u.word = (char **)malloc(sizeof(char *)*20);
for(m=0; m<wIndex; m++)
{
cmd->u.word[m]=strdup(wrd[m]);
}
然后,我尝试将struct命令推送到我的堆栈实现:
struct Cstack
{
struct command *data[100];
int size;
}
int Cstack_Push(Cstack *c, struct command *cmd)
{
if(c->size < STACK_MAX)
{
c->data[c->size]=cmd;
c->size++;
}
else
return -1;
return 0;
}
但是,当我多次执行Cstack_Push时,我的上次推送会覆盖之前的所有推送。因此,当我尝试从每个Cstack-&gt;数据数组中打印u.word时,它会打印所有相同的内容。 为什么要覆盖它们?
编辑:Cstack_Push被这样调用。
struct command *cmd=(struct command*)malloc(sizeof(struct command)*20);
cmd->u.word = (char **)malloc(sizeof(char *)*20);
for(m=0; m<20; m++)
{
cmd->u.word[m]=strdup(wrd[m]);
}
Cstack_Push(Cstack, cmd);