我正在尝试将字符串拆分为标记以创建参数参数数组。我当前的实现如下(path
是正在读取可选参数的用户可执行文件的路径):
// ARG_MAX as defined in limits.h
int execute(char *exe) {
printf("args to %s: ", exe);
char *args = malloc(ARG_MAX);
scanf("%s", args);
char *argv[ARG_MAX];
int i = 0;
argv[i++] = exe;
while ((argv[i] = strsep(&args, " \t")) != NULL) {
i++;
}
free(args);
execv(exe, argv);
return 0;
}
令我困惑的是,根据我的理解,strsep
这应该按预期工作,并且在一定程度上,在测试时它准确地分配为tokens[0]
be path
,并且直到第一个空白字符为止。tokens[1]
tokens_s
但是,当您在空格后输入另一个参数时,这不会分配到tokens[2]
,以此类推用于后续参数。
我似乎无法发现在使用它时我做错了什么strsep
并没有导致所需的功能?
输入:
exe = "/usr/bin/ps"
args = "-e -l"
输出:
exec ps -e