Problemas con el uso de execvp en una cadena construida

Estoy intentando escribir un shell, y parte de su construcción es ejecutar código desde una cadena ingresada por el usuario (búfer). Sin embargo, cuando intento ejecutar la secuencia con entradas adicionales (ae. Echo a), siempre atornilla al chucho y devuelve -1. Estoy en una pérdida en cuanto a por qué. Aquí están las piezas relevantes:

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);

Respuestas a la pregunta(3)

Su respuesta a la pregunta