Ik wil een std::string converteren naar een **char* of char[]** datatype.
std::string str = "string";
char* chr = str;
Resulteert in: "error: kan 'std::string' niet converteren naar 'char' ... ".
Welke methoden zijn er beschikbaar om dit te doen?
Het zal niet automatisch omzetten (godzijdank). Je zult de methode c_str()
moeten gebruiken om de C string versie te krijgen.
std::string str = "string";
const char *cstr = str.c_str();
Merk op dat het een const char *
retourneert; je bent'niet toegestaan om de C-stijl string geretourneerd door c_str()
te veranderen. Als je het wilt verwerken zul je het eerst moeten kopiëren:
std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;
Of in moderne C++:
std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);
Als je gewoon een C-style string wilt die dezelfde inhoud weergeeft:
char const* ca = str.c_str();
Als je een C-stijl string wilt met nieuwe inhoud, is dynamische toewijzing een manier (gegeven dat je de string-grootte niet kent op compileertijd):
char* ca = new char[str.size()+1];
std::copy(str.begin(), str.eind(), ca);
ca[str.size()] = '\0';
Vergeet niet om het later te delete[]
.
Als je in plaats daarvan een statisch gealloceerde, beperkte lengte array wilt:
size_t const MAX = 80; // maximum aantal karakters
char ca[MAX] = {};
std::copy(str.begin(), (str.size() >= MAX ? str.begin() + MAX : str.einde()), ca);
std::string
converteert niet impliciet naar deze types om de eenvoudige reden dat dit meestal een ontwerpgeur is. Zorg ervoor dat je het echt nodig hebt.
Als je echt een char*
nodig hebt, is de beste manier waarschijnlijk:
vector<char> v(str.begin(), str.end());
char* ca = &v[0]; // pointer to start of vector