2010-02-11 10 views

risposta

23

std::string può assumere un char * come parametro constructor e tramite un numero di operatori.

char * mystr = "asdf"; 
std::string mycppstr(mystr); 

o per gli avvocati lingua

const char * mystr = "asdf"; 
std::string mycppstr(mystr); 
+6

Mi chiedo perché tutti coloro che rispondono a questo usano il tipo di carattere difettoso (ma consentito dallo standard) per stringhe letterali. Tutti i valori letterali di stringa sono di sola lettura e, pertanto, deve essere utilizzato il tipo char const *. L'argomento preso da std :: string è anche char const *. – Tronic

+0

quindi se ho una stringa di tipo C in una variabile char *, come posso convertirla in una stringa di stile C++ dato che in senso stretto il parametro per il costruttore dovrebbe essere char const * type? – assassin

+0

@assassin: non hai char * affatto, ma la tua stringa di tipo C è una char const *. Se è il tuo codice, puoi cambiarlo, se è in una biblioteca, non puoi. –

8
char* cstr = //... some allocated C string 

std::string str(cstr); 

Il contenuto di cstr verranno copiati str.

questo può essere utilizzato in operazioni anche come:

std::string concat = somestr + std::string(cstr); 

Dove somestr è già `std :: string``

2

si può fare uso del stringclass constructor che prende un char* come argomento.

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

Grazie mille ... – assassin

0

Un altro modo per eseguire la conversione è quello di chiamare una funzione che prende un const std::string& come parametro:

void foo(const std::string& str); 

void bar() 
{ 
    char* str= ... 

    foo(str); 
} 

penso che la sua molto più ordinato di fare la conversione al limite di funzione di chiamata.

+0

stai dicendo che foo dovrebbe essere una funzione vuota qui e dopo aver chiamato quella funzione str viene convertita in const std :: string type? – assassin

+0

@assassin: No, mi dispiace. 'foo()' è una funzione che accetta 'const std :: string &'. Potrebbe essere uno che scrivi. La mia risposta era solo un modello di utilizzo in cui si ha una stringa c e si desidera convertirla. Separa anche le parti del codice in cui viene generata una c-string da cui i dati vengono utilizzati sotto forma di 'std :: string'. – quamrana