string und char*
-
kp schrieb:
...Meine Frage ist nun ob das elegant ist (z.B. ...=new char...), oder ob es eine bessere Lösung dazu gibt.
Danke und GrußHi,
ich finde das genau richtig (elegant und gut).
IMO ist das genau der Weg, wenn man Daten aus einen std::string einer C-Schnittstelle als non-const-char übergeben muss.
c_str() alleine reicht nicht, wenn die Schnittstelle (hier JavaVMOption::optionString) die Daten ändern (oder sich zumindestens nicht auf const festlegen) will.Willst Du hinterher mit den Daten weiterarbeiten, musst Du sie natürlich wieder explizit übernehmen
path = options[0].optionString;BTW: Einige finden die "+-Schreibweise" eleganter als das append():
string path = "-Djava.class.path="; path += jpath;aber in dem Fall ist das Geschmackssache.
Gruß,
Simon2.
-
was sagt denn die beschreibung zu dem options ???
-
options[0].optionString möchte nen const char* haben...
-
sorry natürlich ohne const,
möchte also nur einen char* haben
-
mh sorry schlecht formuliert, wie lange muss der string denn in options stehen? weil wenn du das delete[] zu früh aufrufst gehts eventuell später schief ?!
-
Das options wird nur einmal für einen Methodenaufruf gebraucht. Gebe es jetzt einfach am Ende meiner Methode wieder frei.
Danke für eure Tipps!
-
kp schrieb:
options[0].optionString = new char[path.length()];Du hast hier ein Zeichen zu wenig reserviert. C-Strings enden immer mit einem Nullzeichen, für das natürlich auch Speicher bereitgestellt werden muss. strcpy fügt dieses Zeichen beim Kopieren immer automatisch dem Zielstring an. Die Funktion weiss aber nicht, ob genügend Speicher vorhanden ist, und überschreibt uU andere Bereiche, was zu undefiniertem Verhalten führt.
-
Wo wir schon bei Strings sind:
in welcher C++ Bibliothek (hoffentlich in der Standatbibliothek) und wie heißen die Funktionen um aus einem String nur Teile herauszulesen?
Z.B. eine Funktion wie "GetPartString(string str, int start, int end)" mit der man den TeilString von 'start' bis 'end' herauslesen kann!Kennt da jemand was?

(In meinem Buch "C++ Intensivkurs" wurde da nähmlich noch nicht näher drauf eingegangen!)
-
Ja gibts, die Methode nennt sich "substr", und du findest sie (und andere nuetzliche String-Funktionen) hier erklaert: http://cppreference.com/cppstring/index.html
-
Cool! Danke!
