Frage

Nach dem Schreiben des folgenden Programms scheint es keine Argumente an die angerufene Anwendung zu übergeben. Während der Forschung _spawnv Und was es kann, _execvp wurde als eine geeignete Alternative gefunden. Sieht jemand das Problem im Quellcode und weiß, was getan werden muss, um es zu beheben?

#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);
}
War es hilfreich?

Lösung

Das erste Argument in der argv Vector ist herkömmlicherweise der voll qualifizierte Name der ausführbaren Datei: Start:

Die Anrufe von _spawnv, _spawnve, _spawnvp und _Spawnvpe sind nützlich, wenn eine variable Anzahl von Argumenten für den neuen Prozess vorhanden ist. Zeiger auf die Argumente werden als Array, Argv, verabschiedet. Das Argument argv [0] ist normalerweise ein Zeiger auf einen Pfad im realen Modus oder auf den Programmnamen im geschützten Modus und Argv1 Durch Argv [n] sind Zeiger auf die Charakter -Saiten, die die neue Argumentliste bilden. Das Argument argv [n +1] muss ein Nullzeiger sein, um das Ende der Argumentliste zu markieren.

(Aus Msdn)

Ebenfalls:

Die Aufrufe von _execv, _execve, _execvp und _execVPE sind nützlich, wenn die Anzahl der Parameter zum neuen Prozess variabel ist. Zeiger auf die Parameter werden als Array übergeben, Argv. Der Parameter argv [0] ist normalerweise ein Zeiger auf cmdname. Die Parameter argv1 Über Argv [n] weisen Sie auf die Zeichenketten hin, die die neue Parameterliste bilden. Der Parameter argv [n+1] muss ein Nullzeiger sein, um das Ende der Parameterliste zu markieren.

(Msdn)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top