'const char *' in ein 'char *' konvertieren



  • Hallo!

    Wie kann man ein 'const char *' in ein 'char *' konvertieren? Und umgekehrt?

    Danke!



  • Wenn du dir wirklich sicher bist, dass du das brauchst:

    const char * p = "foo";
    char * p2 = const_cast<char*>(p);
    

    p wird dadurch aber nicht automatisch nicht-const. Wenn du also später über p2 irgendwelche Verändungen durchführst, hast du undefiniertes Verhalten. Mit anderen Worten: Das ganze bewirkt nur, dass der Compiler dir erlaubt, dir ins Knie zu schießen, wenn du es drauf anlegst.



  • @Bashar: Es muss ja keine ins-Knie-schieß-Aktion sein. Es könnte auch nur ein etwas seltsames Design sein.

    char foo[50];
    //...
    
    const char * bar = foo;
    
    char * quer = const_cast<char *>(bar);
    


  • Jo, man kann auch am Knie vorbeizielen, muss aber eben selbst drauf aufpassen, ohne Mama Compiler 😉



  • Hallo!

    Wozu willst DU überhaupt konvertieren?

    Falls Du diesen Speicher nicht veränderst, dann kannt Du genauso gut einen const char* benutzen. Dieses const bedeutet nur, dass Du den Zeigerinhalt nicht verändern darfst. Den Zeiger darfst Du aber verändern, d.h. auf andere Speicherstellen zeigen lassen.

    Ein const_cast ist immer mit vorsicht zu genießen, da ja nach Compiler und Rechnerarchitektur der Speicher, in dem Deine Konstanten liegen, als Schreibgeschützt markiert sein kann. In diesem Fall macht Dir der Rechner 'nen Strich durch die Rechnung.

    Greetz
    Richie



  • das die hardware was dagegen haben koennte, ist immer das argument fuer dei ganz hatgesottenen. mir reicht es voellig, dass dadurch die programmlogik zerstoert wird und man sich inkonsistenzen einhandelt.


Anmelden zum Antworten