Это утверждение
fgets(sentence, sizeof(sentence), stdin);
неверно. Кажется, вы имеете в виду
fgets(sentence, input, stdin);
В противном случае sizeof( sentence )
выдаст размер указателя, объявленный как
char* sentence = (char*)malloc(sizeof(char) * input);
Обратите внимание, что функция fgets
может добавлять символ новой строки '\n'
к введенной строке. Вы должны удалить его как
sentence[ strcspn( sentence, "\n" ) ] = '\0';