strtok und execvp Verständnisproblem

Tommy57

Erfahrenes Mitglied
Hallo, kann mir jemand helfen. Ich komme hier nicht weiter.

Die Variable command beinhaltet die korrekten Werte und argv wird auch exakt so befüllt, wie im unteren Beispiel. Zumindest, wenn ich mir über printf ausgeben lasse.

Code:
char *argv[18];
char *command;

/* Funktioniert nicht! Über stdin: command = "ls -a"; */
while((command = strtok(command, " ")) != NULL) {
    argv[i] = command;
    command = NULL;
    i++;
}
execvp(argv[0], argv);


/* Funktioniert! */
argv[0] = "ls";
argv[1] = "-a";
execvp(argv[0], argv);

Gruß, Tommy
 

cwriter

Erfahrenes Mitglied
Die Variable command beinhaltet die korrekten Werte und argv wird auch exakt so befüllt, wie im unteren Beispiel. Zumindest, wenn ich mir über printf ausgeben lasse.
Öh, wie prüfst du das denn?
dein
C:
char *argv[18]
würde ja zumindest die Standardargumente überschreiben.
Dann verlangt execvp, dass nach dem letzten Argument in argv noch ein NULL folgt.
Und zuletzt: Ist i denn auf 0 gesetzt, bevor es in die Schleife kommt?
Ist dir bewusst, dass nach einem exec()-Aufruf nicht mehr dein Programm ausgeführt wird, exec() also eigentlich nicht returned?

Gruss
cwriter
 

Tommy57

Erfahrenes Mitglied
Hi cwriter. Danke für die Antwort. Ich konnte das Problem lösen. Wie sich herausgestellt hat, schiebt die Standardeingabe noch ein \n mit in den String, der im execvp den Fehler verursacht. Nachdem ich bei strtotok noch \n ergänzt habe, hat es wunderbar funktioniert.
 

Martin Schaefer

Administrator
Hi Tommy,

danke für den Hinweis. Du kannst deine Threads jetzt als "erledigt" markieren indem du einfach im ersten Post auf "Bearbeiten" klickst und dort dann das Häkchen als Präfix auswählst. :)

Diese Funktion ist jetzt für alle "Erfahrenen Mitglieder" verfügbar.