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à r
một rỗng std::string
, nó không chứa char
s. std::copy
đang cố gắng sao chép-gán char
s kể từ r.begin()
đó, dẫn đến UB.
Bạn có thể thực hiện r
chứ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));