我正在尝试将字符串转换为c ++中的unique_ptr数组,但是在使用strcpy()时出现错误,这就是我所做的
int arraysize{0},i{0};
std::string word;
std::cout<<"Input size of array: ";
std::cin>>arraysize;
std::cin.get();
std::unique_ptr<char[]>ch_array(new char[arraysize]);
std::cout<<"Input a word: ";
getline (std::cin, word);
strcpy(ch_array,word);
我想得到一个单词并将其转换为字符数组以检查它是否是回文。 另外,我只需要使用使用智能指针制作的字符数组,因为我是c ++的初学者,并且我正在尝试练习智能指针。
错误:q3.cpp:在函数'int main()'中: q3.cpp:17:22:错误:无法将参数'1'的'std :: unique_ptr'转换为'char *'到'char * strcpy(char *,const char *)' strcpy(ch_array,word);
任何建议都会有所帮助。 谢谢!
答案 0 :(得分:1)
错误消息不言自明。您正在传递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';