können Sie keine char*
von einem string
string
nicht erhalten Sie freien Zugang zu seinen internen Puffer nicht zulassen. Der nächste, den Sie erhalten können, ist ein const char*
mit .c_str()
, wenn Sie wollen, dass es null terminiert oder .data()
, wenn es nicht null terminiert sein muss.
Sie können dann den von diesen Funktionen zurückgegebenen Zeiger auf char*
umwandeln, aber Sie tun dies auf eigene Gefahr. Abgesehen davon ist dies eine relativ sichere Besetzung, solange Sie sicherstellen, dass Sie die Saite nicht ändern. Wenn Sie es geändert haben, ist der Zeiger, den Sie von c_str()
erhalten haben, möglicherweise nicht mehr gültig.
Dieser Code:
string str("Hello World!");
char* sp = (char*)str.c_str();
sp[5] = 'K';
ist wahrscheinlich ok
aber dies:
string str("Hello World!");
char* sp = (char*)str.c_str();
str = "Chaged string";
sp[5] = 'K';
ist definitiv nicht in Ordnung.
@unicornaddict: danke. Wie finde ich nun die anderen Vorkommen dieses Zeichens in der Zeichenkette? [Die Länge des Strings ist riesig, daher ist das Erstellen eines ganz neuen Strings keine Option] – Moeb
@cambr: Es gibt eine ** überladene ** Version von 'find_first_of', die die ** Position akzeptiert, um die Suche von ** zu starten. als ein Argument. Ich habe hier ein Beispiel gepostet: http://www.ideone.com/bESwL – codaddict