Warum kann ich std :: copy mit std :: string nicht in einen anderen std :: string verwenden? [Duplikat]

Aug 16 2020

Der folgende Code druckt eine leere Zeichenfolge und ich kann nicht verstehen, warum es so ist?

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

Antworten

5 songyuanyao Aug 16 2020 at 20:46

Das Problem ist rein leeres std::string, es enthält kein chars. std::copyversucht charseitdem r.begin(), s zu kopieren und zuzuweisen , was zu UB führt.

Sie können r5 Elemente im Voraus enthalten.

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

Oder

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

Oder verwenden std::back_inserter.

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