Passage d'un tableau à execvp() à partir de l'entrée de l'utilisateur

Je suis en train de passer des arguments entrés par l'utilisateur pour execvp().

Jusqu'à présent, j'ai divisé la chaîne. Si l'utilisateur tape ls -a, temp est enregistré en tant que "ls" et " -", suivi par un caractère NUL. Je ne suis pas tout à fait sûr de savoir comment le signaler correctement dans execvp. Dans les exemples que j'ai vu à l'aide de execvp(temp[position], temp). Je sais que la façon dont je suis en train de le faire pour le moment est mal, mais je ne suis pas sûr de savoir comment le faire correctement! Au moment où j'obtiens une erreur de segmentation.

int main(int argc, char *argv[]) 
{
    char line[124];
    int size = 124;
    char *temp = NULL;

    while(fgets(line, size, stdin) != NULL ) {
        if (strcmp(line, "exit\n") == 0) {
            exit(EXIT_SUCCESS);
        }
        temp = strtok(line, " ");
        while (temp != NULL) {
            printf("%s\n", temp);
            temp = strtok(NULL, " ");
        }
        execvp(temp, &temp);    
    }
    return EXIT_SUCCESS;
}
Puisque vous n'êtes pas en utilisant soit argc ou argv, vous pouvez utiliser int main(void). Avec les options de compilation-je utiliser de façon habituelle, qui empêche un couple de mises en garde.
Je vais utiliser par la suite. Tout simplement pas à ce point dans le temps.
Juste assez mais pour un SSCCE (Bref, Autonome, Exemple Correcte), vous cherchez à éliminer tout ce qui est indifférent à la réduction de l'exemple. C'est un problème mineur — mineur. La plupart des programmes offrent beaucoup plus de possibilités pour sniper que la vôtre.

OriginalL'auteur caerulean | 2013-03-21