字符串到唯一指针数组

String to a unique pointer array

我试图在 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,单词);

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

错误消息不言自明。您传递的是 std::unique_ptr,而应该是 char*std::unique_ptr<char[]> 不能隐式转换为 char*。您需要调用其 get() 方法来获取指向其分配内存的 char* 指针。

此外,strcpy() 期望并生成以 null 结尾的 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] = '[=10=]';

或者,根本不要向用户询问 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] = '[=11=]';