字符串到唯一的指针数组

时间:2018-10-11 16:08:35

标签: c++ arrays string c++11 smart-pointers

我正在尝试将字符串转换为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);

任何建议都会有所帮助。 谢谢!

1 个答案:

答案 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';