Сообщение об ошибке не требует пояснений.Вы передаете std::unique_ptr
, где ожидается char*
.std::unique_ptr<char[]>
неявно преобразуется в char*
.Вам необходимо вызвать метод get()
, чтобы получить указатель char*
на выделенную память.
Кроме того, strcpy()
ожидает и создает строку C с нулевым символом в конце.Но вы ничего не делаете для того, чтобы данные word
вписывались в пределы указанного arraysize
.
Попробуйте вместо этого:
int arraysize{0};
std::string word;
std::cout << "Input size of array: ";
std::cin >> arraysize;
std::cin.ignore();
std::unique_ptr<char[]> ch_array(new char[arraysize+1]);
// or:
// auto ch_array = std::make_unique<char[]>(arraysize+1);
std::cout << "Input a word: ";
getline(std::cin, word);
strncpy(ch_array.get(), word.c_str(), arraysize);
// or:
// std::copy(word.begin(), word.end(), ch_array.get());
ch_array[arraysize] = '\0';
В качестве альтернативы, вообще не спрашивайте у пользователя arraysize
, просто используйте вместо него собственный размер word
:
std::string word;
size_t arraysize;
std::cout << "Input a word: ";
getline(std::cin, word);
arraysize = word.size();
std::unique_ptr<char[]> ch_array(new char[arraysize+1]);
// or:
// auto ch_array = std::make_unique<char[]>(arraysize+1);
strncpy(ch_array.get(), word.c_str(), arraysize);
// or:
// std::copy(word.begin(), word.end(), ch_array.get());
ch_array[arraysize] = '\0';