Stai per ottenere un sacco di kinda errato risposte su str.c_str()
qui. :) Mentre c_str()
è davvero utile, si prega di tenere presente che questo non sarà in realtà convertire la stringa in char*
, ma piuttosto restituire il contenuto della stringa come const char*
. E questa è una grande differenza!
Ciò che è importante qui è che il puntatore che si ottiene da c_str()
è valido solo finché esiste l'oggetto string
specificato. Quindi questo sarebbe terribilmente sbagliato:
class Something {
const char* name;
public:
Something(const std::string& pname) {
this->name = pname.c_str(); /* wrong! the pointer will go wrong as the object from the parameter ceases to exist */
}
};
Quindi, se si vuole convertito, come in: creare un nuovo valore che sarà indipendente dall'originale std::string
, quindi ti consigliamo di fare qualcosa di simile questo:
char* convert(const std::string& str) {
char* result = new char[str.length()+1];
strcpy(result,str.c_str());
return result;
}
Ma ancora c_str()
sarà abbastanza per voi, nella maggior parte dei casi.Basta provare a pensare in termini di tempo di vita degli oggetti.
Perché vuoi farlo? – GManNickG
@GMan: ci sono molti motivi, il principale che sta invocando funzioni in un'API C? –
@Gman Perché ho bisogno di passare la variabile foobar alla funzione inet_pton di UDT che accetta solo variabili di tipo char *. –