【发布时间】:2018-11-27 15:32:44
【问题描述】:
我正在创建一个程序,该程序在启动时会使用 scanf 输入命令和一些参数,并使用这些参数调用 execvp。 我正在使用 strsep 执行此操作。 我将字符串存储在一个数组(char *)中,然后我想将它拆分并将令牌存储在一个新数组中(这次它是一个数组 [],所以我可以将它与 execvp 一起使用)。 用 scanf 保存的参数应该是终端命令(如 "ls" 和 "-l" ecc,"pwd"... 但是变量保存在 PATH) 中,所以它们用 " " 分隔。
Ex :
./mystring
Type arguments : " ls -l "
这是一个示例,仅用于指定将是哪种输入。 我将单独执行 execvp,我需要帮助将字符串拆分为标记。 这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
fflush(NULL); //to clean streams
printf("type the command to start (and arguments if required) \n");
char **st;
char dest[10];
scanf("%s",*st);
int i;
for (i=0;(dest[i]=strsep(st," "))!=NULL;i++)
continue;
for (int c=0;c<i;c++) printf(" arg %d : [%s] ",c,dest[c]);
return 0;
}
第 5 行和第 6 行需要调用 strsep,dest[10] 中的 10 是符号。
第 7 行将输入存储在 st 中。
第 9 行应拆分为 " " 并将命令和参数存储在 dest[I](我将传递给 execvp)中。
第 11 行打印 dest 存储的内容。
这是可悲的输出:
./mystring
type the command to start (and arguments if required)
Segmentation fault: 11
我不明白 strsep 是如何工作的,有人可以帮助我吗?
【问题讨论】:
-
请不要在代码中这样写行号;使用您的代码很痛苦。如果需要数字,最好将它们制成 cmets。
-
做
char st[20];和scanf("%19s",st)这样会更好 -
fflush(NULL); //to clean streams- 你从哪里读到应该这样做? -
为什么需要这样做?
-
@EdHeal 嗯,这是一个很好的问题,我想首先使用 scanf 清理打开的流,因为它通常有很多问题,这是一个奇怪的功能,我不知道它是什么尤其是,我不知道它在main的开头是没用的。