String(Char)Pointer in Array speichern?



  • 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.
    Simon

    falsch, es ist auch beim operator[] (size_type i) const fü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, if pos == size() , the const version returns charT() . 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() und op[] 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. die reverse -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


Anmelden zum Antworten