0

次のプログラムを作成した後、呼び出されたアプリケーションに引数が渡されないように見えます。_spawnvとそれができることを調査しているときに、_execvp適切な代替手段であると思われるものとして見つかりました。ソースコードに問題があり、それを修正するために何をする必要があるかを知っている人はいますか?

#include <stdio.h>
#include <stdlib.h>
#include <process.h>

int main(int argc, char** argv)
{
    int index;
    char** args;
    args = (char**) malloc((argc + 1) * sizeof(char*));
    args[0] = "boids.py";
    for (index = 1; index < argc; index++)
    {
        args[index - 1] = argv[index];
    }
    args[argc] = NULL;
    return _execvp("python", args);
}
4

1 に答える 1

2

argvベクトルの最初の引数は、通常、開始する実行可能ファイルの完全修飾名です。

_spawnv、_spawnve、_spawnvp、および _spawnvpe 呼び出しは、新しいプロセスへの可変数の引数がある場合に役立ちます。引数へのポインターは、配列 argv として渡されます。引数 argv[0] は、通常、リアル モードではパスへのポインタ、プロテクト モードではプログラム名へのポインタであり、argv 1~ argv[n] は、新しい引数リストを構成する文字列へのポインタです。引数 argv[n +1] は、引数リストの終わりを示す NULL ポインタでなければなりません。

( MSDNより)

同じく:

_execv、_execve、_execvp、および _execvpe 呼び出しは、新しいプロセスへのパラメーターの数が可変である場合に役立ちます。パラメーターへのポインターは、配列 argv として渡されます。パラメータ argv[0] は通常、cmdname へのポインタです。パラメータ argv 1から argv[n] は、新しいパラメータ リストを形成する文字列を指します。パラメータ argv[n+1] は、パラメータ リストの終わりを示す NULL ポインタでなければなりません。

( MSDN )

于 2009-11-22T21:25:42.397 に答える