Problemas com o uso de execvp em uma string construída

Eu estou tentando escrever um shell e parte de sua construção está executando o código de uma seqüência de caracteres inserida pelo usuário (buffer). No entanto, quando eu tento execvp a string com entradas adicionais (ae. Echo a), ele sempre parafusa o pooch e retorna -1. Eu não sei o porquê. Aqui estão as peças 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);

questionAnswers(3)

yourAnswerToTheQuestion