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?
Antworten
Zu viele Anzeigen?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 :-)
Ü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);
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
- See previous answers
- Weitere Antworten anzeigen