Kopieren von boost::array<char> std::string
Ich versuche cvopy boost::array<char>
zu std::string
.
boost::array<char, 1024> _buffer;
std::string data;
std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, data.begin());
die nicht arbeiten. Also habe ich ihn ein bisschen verändert.
char _buffer[1024];
std::string data;
std::copy(_buffer, _buffer+bytes_transferred, data.begin());
zweite ist nicht arbeiten entweder.
- Also, was genau meinst du mit "funktioniert nicht"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie back_insert_iterator. Die Zuordnung zu rufen
push_back
Funktion der zugrunde liegenden Behälter, so dass Sie nicht brauchen, um sorgen mit dem zuweisen von Speicherplatz manuell.Das Problem hier ist, dass
copy
davon ausgegangen, dass der Raum bereits für die Daten, die Sie schreiben; es erstellt keine neue Zimmer für Sie. Folglich, beide der oben genannten Teile des Codes nicht definiertes Verhalten verursachen, da Sie gehen, um das kopieren von Zeichen an einem Ort, wo Raum noch nicht zuvor reserviert wurde.Der beste Weg, dies zu tun wäre, um die
string
Konstruktor:oder
Diese wird initialisiert den string als eine Kopie der Daten in dem array gespeichert.
Hoffe, das hilft!
reserve()
Wenn ichstd::copy
? und warum nichtstd::copy
crash ?reserve
wird nicht dieses Problem beheben. Sie müsstenresize
Sie die Zeichenfolge, so dass es ausreichend Raum vor der Verwendungstd::copy
.reserve
dient eine völlig andere Funktion. Als für, warum es keinen crash, ich habe absolut keine Ahnung. Es ist Undefiniertes Verhalten, was bedeutet, dass das Programm alles tun können. Nicht abstürzt, ist vollkommen legal von der C++ Spez.