Probleme mit der Verwendung von execvp für eine erstellte Zeichenfolge

Ich versuche, eine Shell zu schreiben, und ein Teil ihrer Konstruktion besteht darin, Code aus einer vom Benutzer eingegebenen Zeichenfolge (Puffer) auszuführen. Wenn ich jedoch versuche, die Zeichenfolge mit zusätzlichen Eingaben (z. B. Echo a) auszuführen, verschraubt sie immer das Hündchen und gibt -1 zurück. Ich weiß nicht warum. Hier sind die relevanten Stücke:

char * buffer = calloc(100, sizeof(char));
...
fgets(buffer, 100, stdin);
buffer[strlen(buffer) - 1] = 0; // necessary because of a newline inserted by fgets
...
cmd = strsep(&buffer, " ");
char * str = malloc(50 * sizeof(char));
strcat(str, "./");
strcat(str, cmd);
strcat(str, ".out");
...
i = execvp(str, (char * *) buffer);

Antworten auf die Frage(3)

Ihre Antwort auf die Frage