std :: string과 함께 std :: copy를 다른 std :: string에 사용할 수없는 이유는 무엇입니까? [복제]
다음 코드는 빈 문자열을 인쇄하는데 그 이유를 이해할 수 없습니까?
#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
문제는 r
비어 std::string
있고 char
s 가 포함되어 있지 않다는 것 입니다. 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));