Kann mir bitte jemand sagen, wie man eine C-Stil-Zeichenfolge (d. H. Ein char *) in eine C++ - Stil-Zeichenfolge (d. H. Std :: string) in einem C++ - Programm?Umwandlung von c-Stil-String in C++ - Stil Zeichenfolge
Vielen Dank.
Kann mir bitte jemand sagen, wie man eine C-Stil-Zeichenfolge (d. H. Ein char *) in eine C++ - Stil-Zeichenfolge (d. H. Std :: string) in einem C++ - Programm?Umwandlung von c-Stil-String in C++ - Stil Zeichenfolge
Vielen Dank.
std::string
kann eine char *
als constructor Parameter und über eine Reihe von Operatoren.
char * mystr = "asdf";
std::string mycppstr(mystr);
oder für die Sprach Anwälte
const char * mystr = "asdf";
std::string mycppstr(mystr);
char* cstr = //... some allocated C string
std::string str(cstr);
Der Inhalt cstr
wird str
kopiert werden.
Dies kann bei Operationen auch wie verwendet werden:
std::string concat = somestr + std::string(cstr);
Wo somestr
bereits `std :: string``
Sie ist, können den string
class constructor machen, die eine char*
als Argument verwendet.
char *str = "some c style string";
string obj(str);
Vielen Dank ... – assassin
Eine weitere Möglichkeit, um die Konvertierung zu tun ist, eine Funktion aufzurufen, die eine const std::string&
als Parameter übernimmt:
void foo(const std::string& str);
void bar()
{
char* str= ...
foo(str);
}
Ich denke, die viel mehr ordentlich die Umwandlung bei einem Funktionsaufruf Grenze zu tun.
sagst du, dass foo hier eine leere Funktion sein sollte und beim Aufruf dieser Funktion wird str in const std :: string type konvertiert? – assassin
@assassin: Nein, tut mir leid. 'foo()' ist eine Funktion, die ein 'const std :: string &' benötigt. Es könnte jemand sein, den du schreibst. Meine Antwort war nur ein Verwendungsmuster, bei dem Sie eine C-Zeichenfolge haben und diese konvertieren möchten. Es trennt auch die Teile des Codes, in denen ein C-String erzeugt wird, von dem die Daten in Form eines 'std :: string' verwendet werden. – quamrana
Ich frage mich, warum alle, die darauf reagieren, den fehlerhaften (aber vom Standard zugelassenen) char * -Typ für Zeichenfolgenliterale verwenden. Alle String-Literale sind schreibgeschützt und daher sollte char const * type verwendet werden. Das Argument von std :: string ist auch char const *. – Tronic
Also, wenn ich C-String in einer char * -Variable habe, dann wie konvertiere ich es in eine C++ - Stil-Zeichenfolge, da streng genommen der Parameter zum Konstruktor char const * type sein sollte? – assassin
@assassin: Sie haben überhaupt kein Zeichen *, aber Ihre Zeichenfolge vom Typ C ist ein Zeichen const *. Wenn es Ihr Code ist, können Sie es ändern, wenn es in einer Bibliothek ist, können Sie nicht. –