Вы не выделили никакой памяти для str
.Итак, вы пытаетесь записать указатель, который не может содержать строку.По сути, это приводит к неопределенному поведению и ошибкам сегмента.
Решение:
Вы должны использовать std :: string вместо указателя.
std::string str;
std::cout<<"please enter string : ";
std::cin >>str;
Также старайтесь несмешивать C и C ++.
Использовать streams
в C ++ не printf
В качестве альтернативы есть 2 других подхода:
Не очень хороший другой подход 1:
Вы можете выделить память для str
, сделав массив фиксированного размера:
#define MAX_INPUT 256
char str[MAX_INPUT]={0};
Недостаток:
Для этого потребуетсязнать длину максимального ввода, который пользователь может ввести во время компиляции, поскольку Массивы переменной длины не разрешены в C ++.
Не так хорошо, другиеПодход 2:
Вы можете динамически выделять память для str
, используя new []
. str
будет указателем в этом случае.
#define MAX_INPUT 256
char *str = new char[MAX_INPUT];
Недостаток:
Опять же, у этого подхода есть недостаток, заключающийся в том, что в этом случае нужно знать, сколько памяти выделить во время компиляции, поскольку пользователь вводит строку.Кроме того, вы должны помнить, чтобы освободить место, позвонив по номеру delete[]
, иначе у вас утечка памяти.Кроме того, постарайтесь избегать максимально возможного использования new
в C ++.
Вывод:
Лучшее решение здесь - использовать std::string
, потому что это избавляет вас от всех вышеперечисленных проблем.