String(Char)Pointer in Array speichern?



  • Hallo,

    Also erstmal danke für die schnellen Antworten!
    Soweit ich weiß ist bei std::string immer eine Null terminierung aber ich kann mich auch täuschen.

    Mir war nur nicht klar warum es zu diesen Output kam, jetzt is es mir klar!
    Grundsätzlich wollte ich folgendes machen:

    Das test_array[höhe][breite] sollte ein Spielfeld darstellen, und in diesem Array sollen dann die Pointer von den Buchstaben gesetzt werden.
    Diese Buchstaben sollen eine Spielfigure ergeben.
    Aber da meine Spielfiguren sowieso aus einen Buchstaben bestehen, werde ich char[2] Array(Buchstabe+ Null) verwenden.

    mfg



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