我正在创建一个程序,该程序在启动时接受输入命令和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;
}
调用strsep需要第 5 行和第 6 行,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 是如何工作的,有人可以帮助我吗?