Вы должны использовать:
std::cin.ignore();
Перед вашим getline(...);
, потому что он читает символ новой строки, вызванный нажатием клавиши ввода, вместо того, чтобы позволить вам набрать сообщение. См. этот вопрос для получения более подробной информации.
Вы получаете Expression: string subscript out of range
исключение, потому что вы пытаетесь вставить здесь пустую строку: printf("%c", outMessage[i]);
РЕДАКТИРОВАТЬ: Как @Johnny Mopp указал в комментарии, outMessage.length()
возвращает тип size_t, который является беззнаковым типом. Затем из 0 без знака вы вычитаете 1, переполняя его до «большого» числа, поэтому for l oop пытается вывести очень длинную несуществующую строку.