Разберем построчно.
char *empty[1];
Объявлен массив из одного указателя. empty[0] - единственный элемент, указывает в совершенно случайное место, не будучи инициализирован.
cin >> *empty;
empty - по сути, указатель на первый элемент массива. *empty - разыменованный первый элемент массива, то же, что и empty[0] - т.е. указатель куда-то. Неизвестно куда. И вы в это неизвестно куда пишете.
Но когда пишешь неизвестно куда, обычно случается неизвестно что...
Но даже если бы туда можно было написать, то сравнение
(*empty == *mas)
никогда бы не было корректным - потому что вы сравниваете не содержимое строк, а указатели. А вероятность, что случайно в empty[0] будет то же значение, что и в mas[0] - исчезающе мала.
Вы должны приготовить место для записи, например,
char empty[100];
или можно динамически выделить память
char * empty = new char[100];
и потом писать в него
cin >> empty;
Ну, и сравнивать специальными функциями - например, strcmp. (О string пока говорить, как я понимаю, рано.)
char *empty[1];? – VladD Mar 29 '16 at 16:25char. Он не пустой, в нём один элемент. Теперь,*emptyесть первый (ну то есть нулевой) неинициализированный указатель.cin >> *emptyчитает ввод пользователя в область памяти по неинициализированному указателю — «на кого бог пошлёт». Это скорее всего затрёт чужую память. – VladD Mar 29 '16 at 16:33charкардинально разные вещи. Сравнение указателей проверяет равенство указателей :) а не текста, который возможно лежит по этим указателям. Но это не причина падения — до этого кода программа просто не доходит. – VladD Mar 29 '16 at 16:36