【发布时间】:2017-03-29 22:24:20
【问题描述】:
我正在尝试将字符串拆分为标记以创建参数参数数组。我当前的实现如下(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] 分配为path,并将tokens[1] 分配为无论tokens_s 直到第一个空格字符是什么。
但是,当您在空格后输入另一个参数时,它不会分配到tokens[2],以此类推以用于后续参数。
我似乎无法发现我在使用 strsep 时做错了什么,但没有提供所需的功能?
输入:
exe = "/usr/bin/ps"
args = "-e -l"
输出:
exec ps -e
【问题讨论】:
-
scanf("%s", args);不会将'\t'或空格保存到args。使用fgets()。建议发布您使用的输入。 -
已添加输入。尝试过使用
fgets(),但在提示我在命令行输入参数时,它只是继续而不提示? -
由于这篇文章缺乏完整的可编译代码,它只是使它变得比需要帮助更难。添加
fgets()可能是个问题,因为其他代码仍在使用scanf()。强烈建议发布显示问题的完整最小代码。 -
对不起,代码没有太多额外的上下文,我已经更新以包含完整的方法。没有使用 scanf 运行其他代码