Home Articles

String到唯一指针数组

Asked
Viewed 27 times
0

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

  • 1

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

Related