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