Essayez d'utiliser execvp() en C avec la saisie de l'utilisateur sous unix

Je suis en train de faire un programme qui demande à l'utilisateur pour une commande, puis utiliser exec pour exécuter cette commande.

Par exemple, si ils m'ont donné "ls-la", je serais pour l'exécution de cette commande. J'ai essayé le code suivant:

#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{

    int ret, num_args;

    printf("Enter number of arguments (Example: \"ls -la\" has 1 argument): ");
    scanf("%d", &num_args);

    char *cmd[num_args];

    printf("Enter command name: ");
    scanf("%s", &cmd[0]);

    int i;
    for (i = 0; i < num_args; i++)
    {
            printf("Enter parameter: ");
            scanf("%s", &cmd[i]);
    }

    execvp(cmd[0], cmd);
}

Cependant, quand j'ai essayé d'exécution suivant il m'a donné un "segmentation fault"

$ ./a.out 
Enter number of arguments (Example: "ls -la" has 1 argument): 2
Enter command name: ls
Enter parameter: -la
Enter parameter: .
Segmentation fault
$

Des idées?

OriginalL'auteur | 2009-08-24