56 Stimmen

Konvertierung einer C-artigen Zeichenkette in eine C++ std::string

Wie konvertiert man am besten eine Zeichenkette im C-Stil in eine C++ std::string ? In der Vergangenheit habe ich es mit stringstream s. Gibt es einen besseren Weg?

71voto

templatetypedef Punkte 343693

C++-Strings haben einen Konstruktor, mit dem Sie eine std::string direkt aus einer C-artigen Zeichenkette:

const char* myStr = "This is a C string!";
std::string myCppString = myStr;

Oder, alternativ:

std::string myCppString = "This is a C string!";

Wie @TrevorHickey in den Kommentaren anmerkt, sollten Sie darauf achten, dass der Zeiger, mit dem Sie die std::string mit ist kein Null-Zeiger. Wenn dies der Fall ist, führt der obige Code zu undefiniertem Verhalten. Andererseits könnte man bei einem Null-Zeiger argumentieren, dass man gar keine Zeichenkette hat :-)

14voto

Überprüfen Sie die verschiedenen Konstruktoren der String-Klasse: Dokumentation Das könnte Sie interessieren:

//string(char* s)
std::string str(cstring);

Und:

//string(char* s, size_t n)
std::string str(cstring, len_str);

6voto

Shreevardhan Punkte 11363

C++11 : Überladen eines String-Literal-Operators

std::string operator ""_s(const char * str, std::size_t len) {
    return std::string(str, len);
}

auto s1 = "abc\0\0def";     // C style string
auto s2 = "abc\0\0def"_s;   // C++ style std::string

C++14 : Verwenden Sie den Operator von std::string_literals Namensraum

using namespace std::string_literals;

auto s3 = "abc\0\0def"s;    // is a std::string

5voto

trojanfoe Punkte 117964

Sie können die Initialisierung einer std::string direkt aus einer c-Zeichenkette:

std::string s = "i am a c string";
std::string t = std::string("i am one too");

5voto

Manas Punkte 598

Wenn Sie meinen char* a std::string können Sie den Konstruktor verwenden.

char* a;
std::string s(a);

Oder wenn die string s bereits existieren, schreiben Sie dies einfach:

s=std::string(a);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X