gpt4 book ai didi

c++ - 字符串到唯一指针数组

转载 作者:行者123 更新时间:2023-11-28 04:31:35 31 4
gpt4 key购买 nike

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

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

最佳答案

错误消息是不言自明的。您正在传递 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] = '\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';

关于c++ - 字符串到唯一指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52764530/

31 4 0
文章推荐: javascript - 在剑道网格行和列中
文章推荐: javascript - 全宽
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com