【发布时间】:2014-05-27 20:16:40
【问题描述】:
我必须制作自己的 bash 版本,但我目前正忙于获取令牌。
这个程序的目的是用户插入命令并且程序执行它(如bash)。命令从标准输入流出(当输入/返回时,执行)。
当我想分隔命令和参数时遇到问题,例如 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;
...
}
}
【问题讨论】:
-
也许你想把你的while改成这样:while(tokens == strtok(NULL, " ") 使用相等运算符,单独的'='是赋值运算符。
-
代码看起来没问题。 @TheCrafter 任务很好。
while将检查 LHS 上的值是否为空。 -
@user2202368
command = tokens不起作用,command是一个数组。而且你没有声明line。总体思路是可以的,尽管您应该阅读整行而不是在 50 处截断(即使您丢弃结尾) -
@MattMcNabb 我将如何更改它以便读取整行?离开50?那我将如何存储命令的名称?我不能使用指针,因为当
tokens更改时command更改 -
您可以读取 50 个字符,然后丢弃直到并包括下一个换行符的字符。或者您可以随时动态分配内存。您应该将这些字符存储在一个数组中。
strtok函数返回指向同一个数组的指针;如果这不合适,那么您将不得不复制所有内容。