字符串到唯一指针数组
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=]';
我试图在 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=]';