对于学校作业,我必须制作一个Unix shell。我们必须实现的一个功能是,当它们被';'分隔时,能够从同一行执行多个命令。我试图使用strtok来实现这一点,但由于某种原因,它只执行最后一个命令(例如," ls; pwd"只执行pwd)。两个命令在单独使用时工作正常,但不能一起使用。这是涉及strtok
的代码const char* s = ";";
char* token = strtok(pinput, s);
while( token != NULL )
{
int argc = get_argc(token);
char** argv = get_argv(argc, token);
parse(argc, argv);
token = strtok(NULL, s);
}
}
我测试了get_argc,get_argv,并解析了一堆,它们似乎都运行良好。在使用strtok时,我有什么不对吗?感谢。
答案 0 :(得分:1)
我不知道你的get_argc()和get_argv()正在做什么...所以这里有一些东西解释了strtok对命令行用户输入的使用。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Sample command line => a.out 'ls;pwd;ls;pwd'
// Have to use quotes around your input from command line, due to the
// special character ";" in your input.
int main(int argc, char *argv[])
{
int iLen = strlen(argv[1]);
char *sInput = (char *)malloc((iLen+1) * sizeof(char));
strcpy(sInput, argv[1]);
printf("String => %s\n", argv[1]); // String => ls;pwd;pwd;pwd
char *sSeparator = ";";
char *pToken = strtok(sInput, sSeparator);
while(1)
{
if(pToken == NULL)
break;
printf("Token = %s\n", pToken);
pToken = strtok(NULL, sSeparator);
}
return 0;
}
答案 1 :(得分:0)
您可以将整个字符串作为输入,然后使用“;”拆分。由于这是学校作业,我希望你尝试编写它。