std :: string과 함께 std :: copy를 다른 std :: string에 사용할 수없는 이유는 무엇입니까? [복제]

Aug 16 2020

다음 코드는 빈 문자열을 인쇄하는데 그 이유를 이해할 수 없습니까?

#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;
}

답변

5 songyuanyao Aug 16 2020 at 20:46

문제는 r비어 std::string있고 chars 가 포함되어 있지 않다는 것 입니다. std::copy복사 할당하려고하고 char이후의 r.begin()UB에있는 리드.

r미리 5 개의 요소를 포함 하여 만들 수 있습니다 .

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

또는

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

또는 std::back_inserter.

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