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::stringcharsが含まれていません。以来、sstd::copyをコピー割り当てしようとしています。これはUBにつながります。charr.begin()

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));