2

出力をリダイレクトできるように、spawnvp()を使用してコマンドを実行する必要があります。私の問題は、argv がないことですが、コマンド全体を含む文字列だけなので、分割する必要があります。残念ながら、生成した argv を関数に渡すと例外が発生しました。

このようにするとうまくいきます:

char* argv[2];
argv[0] = "kzip";
argv[1] = NULL;

これは私がやっている方法ですが、失敗しています:

char** argv2 = (char**)malloc(sizeof(char*) * 2);
argv2[0] = "kzip";
argv2[1] = NULL;

これは私がspawnvp()を呼び出す方法です:

hProcess = (HANDLE)spawnvp(P_NOWAIT, argv2[0], (const char* const*)&argv2);

char[] と char* の間にいくつかの違いがあることは知っていますが、char** の代わりに動的に作成された char*[] を作成する方法がわかりません。

4

4 に答える 4

3

私はそれのために火の中に手を入れませんが、あなたは&このラインからドロップする必要があります.

hProcess = (HANDLE)spawnvp(P_NOWAIT, argv2[0], (const char* const*)&argv2);

argv == &argvしかしargv2 != &argv2

于 2011-05-07T12:57:35.000 に答える
1

spawnvp への最後の引数が間違っていspawnvp(P_NOWAIT, argv2[0], argv2);ます。ポインタのアドレスではなく、単に である必要があります。

于 2011-05-07T13:03:49.733 に答える
0

spawnxx()を使用して出力をリダイレクトすることはお勧めできません。popen()を使用し、コマンド文字列を作成して適切にリダイレクトすることをお勧めします。たとえば、stdoutとstderrをcommand.exeからsomefile.txtにリダイレクトする場合です。

popen("command.exe &> somefile.txt")
于 2011-05-07T13:16:47.023 に答える
0

シェル スタイルのコマンド ラインを使用している場合は、次の argv を使用して生成する必要があります。

(char []){ "sh", "-c", command, 0 }
于 2011-05-07T13:54:24.623 に答える