C 从字符串获取令牌(stdin)
我必须制作自己版本的bash,但我目前一直在获取代币 这个程序的目的是用户插入命令并由程序执行(如bash)。命令从标准输入(当按下回车键时,执行) 当我想分离命令和参数时,我遇到了一个问题,例如,C 从字符串获取令牌(stdin),c,token,tokenize,strtok,C,Token,Tokenize,Strtok,我必须制作自己版本的bash,但我目前一直在获取代币 这个程序的目的是用户插入命令并由程序执行(如bash)。命令从标准输入(当按下回车键时,执行) 当我想分离命令和参数时,我遇到了一个问题,例如,echo lol我想要一个数组(指针或更好的?),它将存储命令echo和参数lol 我试过这样做,但我不确定自己是否走上了正确的道路。有什么建设性的建议吗 char *tokens; char *arg[10]; char command[100]; int token_counter; while
echo lol
我想要一个数组(指针或更好的?),它将存储命令echo
和参数lol
我试过这样做,但我不确定自己是否走上了正确的道路。有什么建设性的建议吗
char *tokens;
char *arg[10];
char command[100];
int token_counter;
while(scanf("%50[^\n]", line) != EOF){
tokens = strtok(line, " ");
command = tokens;
token_counter = 0;
while(tokens = strtok(NULL, " ")){
arg[token_counter] = tokens
token_counter++;
}
switch(command){
command1 :
//code
break;
command2 :
//code
break;
...
}
}
我认为您可以使用链表进行解析:对于简单的命令,array可能还可以,但是如果您想要实现一个真正的shell,这将很困难
LL解析器可能会让您感兴趣:也许您想将while更改为:while(tokens==strtok(NULL,”)使用相等运算符,solo“=”是赋值运算符。代码看起来很好。@crafter赋值很好。
while
将检查LHS上的值是否为null。@user2202368command=tokens
不起作用,command
是一个数组。而且您没有声明line
。虽然是空的,但总体思路是可以的你应该通读整行,而不是在50处删掉(即使你放弃了结尾)@MattMcNabb我该如何更改它以便它读取整行?保留50?我该如何存储命令的名称?我不能使用指针,因为当标记更改命令更改时,您可以读取50,然后丢弃字符,直到下一个换行。或者您可以动态分配mem您应该将这些字符存储在一个数组中。strtok
函数将指针返回到同一个数组中;如果这不合适,那么您必须复制所有字符。