Tại sao tôi không thể sử dụng std :: sao chép với std :: string sang một std :: string khác? [bản sao]

Aug 16 2020

Đoạn mã sau in ra một chuỗi trống và tôi không thể hiểu tại sao lại như vậy?

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
    std::string s="hello";
    std::string r;
    std::copy(s.rbegin(),s.rend(), r.begin());
    std::cout<<r;
    return 0;
}

Trả lời

5 songyuanyao Aug 16 2020 at 20:46

Vấn đề là rmột rỗng std::string, nó không chứa chars. std::copyđang cố gắng sao chép-gán chars kể từ r.begin()đó, dẫn đến UB.

Bạn có thể thực hiện rchứa trước 5 phần tử.

std::string r(5, '\0');

Hoặc là

std::string r;
r.resize(5);

Hoặc sử dụng std::back_inserter.

std::string r;
std::copy(s.rbegin(),s.rend(), std::back_inserter(r));