String



  • Hallo.

    Ich stelle meine Frage direkt:

    Ist es vom Standard garantiert dass std::strings nullterminiert sind? Also dass:

    std::string test = "some string";
    (*(char*)(&test[0] + test.length())) == 0
    

    Bei VC++ ist es jedenfalls so, wenn es bei anderen Compilern anders sein sollte hätte das schlimme Auswirkungen auf das Verhalten einer meiner Klassenlibs, deswegen frage ich 🙂

    Danke !



  • test.c_str() ist garantiert nullterminiert, falls es dir hilft.

    Wie es sonst ist, weiß ich leider nicht.



  • Die const-Version von op[] gibt 0 zurück, wenn du sie mit ihr die länge übergibst, aber op[] non-const hat aber schon UB bei index==länge.

    auch dein bsp(was btw ziemlich umständlich geschrieben ist), ist UB.

    allerdings hab ich neulich gemerkt, dass man indirekt gar keine andere möglichkeit hat, als intern vector zu nehmen und die nullterminierung natürlich mit abzuspeichern, weil c_str() sie eh braucht...

    bb

    kurz und knapp: nein, vom standard nicht direkt garantiert. aber wird wohl bei jeder standard-lib so sein.
    wieso brauchst du denn genau das?



  • Ok, danke euch.


Log in to reply