String(Char)Pointer in Array speichern?
-
Soweit ich weiß ist bei std::string immer eine Null terminierung aber ich kann mich auch täuschen.
Du täuschst dich.
Nur bei der Memberfunktion c_str() ist das terminierende 0 garantiert.
Simon
-
ok thx!
-
theta schrieb:
Soweit ich weiß ist bei std::string immer eine Null terminierung aber ich kann mich auch täuschen.
Du täuschst dich.
Nur bei der Memberfunktion c_str() ist das terminierende 0 garantiert.
Simonfalsch, es ist auch beim
operator[] (size_type i) constfür i == size() garantiert, dass 0 zurückgegeben wird...bb
-
Und wie kann ich jetzt sicherstellen das mein string 0 Terminiert ist, ohne den string mittels c_str zu konvertieren?
mfg
-
1. wozu brauchst du das denn?
2. hab ich doch gerade geschrieben, dass der op[] dieses verhalten in der const-Version erfüllt - in der non-const Version ist das Verhalten nicht definiert...bb
-
String_ schrieb:
Und wie kann ich jetzt sicherstellen das mein string 0 Terminiert ist, ohne den string mittels c_str zu konvertieren?
Du musst das gar nicht sicherstellen. Wenn du einen C-String über
c_str()holst, ist eine Nullterminierung garantiert. Und ausser für C-Strings brauchst du ja keine Nullterminierung...
-
Nachtrag:
21.3.4 basic_string element access schrieb:
const_reference operator[] (size_type pos) const;
reference operator[] (size_type pos);Returns: If
pos < size(), returns*(begin() + pos). Otherwise, ifpos == size(), the const version returnscharT(). Otherwise, the behavior is undefined.bb
-
@unskilled: habs auch gerade gesichtet im Standard.
-
1.Wollte nur wissen ob es noch andere Möglichkeiten gibt.
-
Warum legst Du überhaupt ein Array von Array von Zeigern an? Was bringen Dir die Zeiger?
-
String_ schrieb:
1.Wollte nur wissen ob es noch andere Möglichkeiten gibt.
Also
c_str()undop[]bietet dir das an...
Außerdem gibt es aber noch viel bessere Wege, wo es ganz egal, ob der string so etwas wie ne Nullterminierung bietet:
const_iterator/iterator,begin/end(bzw. diereverse-varianten, wenn du rückwärts gehen möchtest) - google-Stichwort hierzu wäre "Iterator"
Und wenn du unbedingt mit indizes arbeiten möchtest, dann hättest du auch noch die Variante:std::string my_string("asdkgasdjkadlkajsdlJ"); for(std:string::size_type i(0), e(my_string.size()); i != e; ++i) { std::cout << my_string[i]; //oder was auch immer du hier machen möchtest... }Aber jetzt sag doch bitte endlich mal, wieso du denkst, dass du das brauchst!? und wieso du allg. so komische Dinge machst^^
bb