質問
だから私は基本的に私は、UNIXでEXECV()の呼び出しに渡すしようとしているアレイあたり1つの引数のベクトルの引数を持っています。
; int型EXECV(CONSTのchar *パス、チャー*のCONST [] ARGV):EXECVはそうのような2つのパラメータを受け付け
ポインタの配列に文字列の私のベクトルを変換するための最良の方法は何ですか?今、私は次のことをやってますが、私はと言うと、それを実行したときには、ps -a -f、PS不正な引数を言って私に叫びます。よすべてのヘルプは大歓迎です。
vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
arg[j] = (char*)args[j].c_str();
}
retval = execv(args[0].c_str(), arg);
>ps
PID TTY TIME CMD
635 ttys000 0:00.18 -bash
16106 ttys000 0:00.00 ./test cpp
12590 ttys001 0:00.02 -bash
>ps -a
ps: illegal argument: ?????
解決
私はあなたの問題は、あなたが配列の最後にNULLを入れて無視されていることかもしれないと思います。これを試してください:
char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]
他のヒント
EXECV機能は、新しいプログラムに利用できる引数リストを表すNULLで終わる文字列へのポインタの配列を提供しています。最初の引数は、慣例により、実行されているファイルに関連付けられたファイル名を指す必要があります。ポインタの配列はNULLポインタで終了しなければなりません。
所属していません StackOverflow