Если вы не хотите использовать std :: string или любые другие стандартные контейнеры, как если бы было предложено ранее, у вас есть два основных варианта:
Прямой один - выделить буферзаранее, достаточно большой, чтобы хранить входные данные
std::cout << "Input a word: ";
char ch_array[100];
std::cin >> ch_array;
Гораздо сложнее - прочитать ввод по символу и перераспределить память
Потому что перераспределение дает много,И я не предлагаю его использовать, пока память не будет чрезвычайно ограничена, и вы не сможете потратить даже лишний байт данных.Просто чтобы показать, насколько это может быть сложно:
char* ch_array;
static int count = 0;
char c = getchar();
while(c != '\n')
{
if( count == 0)
ch_array = static_cast<char*>( malloc( sizeof(char)+1 ) );
else
ch_array = static_cast<char*>( realloc(ch_array, sizeof(char)*(count+2) ) );
ch_array[count] = c;
count++;
c = getchar();
}
ch_array[count] = '\0';
В этом коде также пропускаются проверки ошибок, которые абсолютно необходимы для перераспределения.С ними будет еще сложнее
Что касается умного указателя , который есть в названии, но, похоже, не имеет отношения к вопросу:
С первой опцией вы можете выделить буфер в куче и использовать его:
std::unique_ptr<char[]> ch_array(new char[100]);
Со вторым вам нужно пользовательское удаление, как описано здесь Можно ли использовать умные указатели C ++вместе с malloc С?