2010-02-11 6 views

Antwort

23

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); 
+6

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

+0

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

+0

@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. –

8
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``

2

Sie ist, können den stringclass constructor machen, die eine char* als Argument verwendet.

char *str = "some c style string"; 
string obj(str); 
+0

Vielen Dank ... – assassin

0

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.

+0

sagst du, dass foo hier eine leere Funktion sein sollte und beim Aufruf dieser Funktion wird str in const std :: string type konvertiert? – assassin

+0

@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