-3

私は、起動時に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 の仕組みがわかりません。誰か助けてくれませんか?

4

1 に答える 1