darf man einen string über c_str() ändern?



  • ist das erlaubt?

    std::string input = "Ho";
    char* p = const_cast<char*>(input.c_str());
    p[1] = 'i';
    

    wenn nein, warum nicht?



  • Nein, es ist nicht erlaubt, weil du damit die Speicherverwaltung des Strings aushebeln könntest (schließlich hat es ja einen Grund, daß die Methode einen "const char*" ausgibt). Aber zum Glück hat der String den Operator[] überladen, so daß du problemlos "input[1]='i';" schreiben kannst 😉



  • linuxpinguin schrieb:

    ist das erlaubt?

    ...const_cast...
    

    Eigentlich NIE. 😉

    "erlaubt" heißt hier ja nur: Es gelten weiterhin die "Zusagen der Programmiersprache". Mit einem const_cast übernimmst Du halt selbst die Verantwortung für das, was passiert ... und üblicherweise kann man das viel schlechter als der Compiler.

    In diesem Fall mußt Du z.B. wissen, was bei so einem Zugriff auf ein Objekt der std::string-Klasse passiert, was nicht trivial ist und sich von Version zu Version ändern kann/wird.

    Manchmal kann man es wirklich nicht anders lösen und weiß es wirklich besser als der Compiler, dann kann man dessen Bedenken mittels eines "_cast" zum Schweigen bringen, aber man sollte sich dessen bewusst sein, was man da tut.

    Gruß,

    Simon2.


Anmelden zum Antworten