const char*



  • hi,
    wozu benutzt man denn eigentlich ein const char*. const vor den datentype heist doch eigentlich das die variable nurnoch gelesen werden kann - jedoch kann ich bei einem const char* den variablen inhalt ändern. wozu also?

    mfg blan



  • 'const' ist nutzlos. man sollte darauf verzichten.



  • net schrieb:

    'const' ist nutzlos. man sollte darauf verzichten.

    doch aber nur in dem zusammenhang oder?

    mfg blan



  • blan schrieb:

    doch aber nur in dem zusammenhang oder?

    ja. für 'const-methoden' ist wieder zu gebrauchen



  • const char* string = "Hallo Welt!";
    

    Meinst du sowas? Falls ja: Den Inhalt darf man hier nicht ändern! Laut Standard sind String-Literals immer const. Im Grunde ist es falsch wenn man das const weg lässt.

    Gruß



  • komisch - bin verwirrt 😮

    also const verwende ich jetzt wann immer, bekannst ist mir folgendes

    void foo(const int *a)
    {
      // ...
    }
    

    oder

    const int a = 23;
    

    also was is nun richtig - const char* / char* ?

    mfg blan



  • const char * sagt aus dass der Inhalt des Speichers konstant ist. Den Zeiger selbst kannst Du ändern, will heissen, Du darfst ihm ein anderes kostantes (oder auch variablen) Stringliteral zuweisen.

    const char *s = "Hallo, Welt";
    s = "Hallo, Walter"; // erlaubt
    s[0] = 'W'; // verboten
    

    Sollte man eigentlich immer machen wenn man Verarbeitungsfunktionen für Felder macht und dem Nutzer sagen möchte "ich ändere deine Daten nicht"



  • also ich code ja eigentlich nur c ohne ++ und mich hat 'const' immer genervt. ich habe noch keinen nachteil dadurch verspürt, dass ich 'const' konsequent verschmähe



  • Den Nachteil spürst du, wenn du mal auf einen anderen Compiler umsteigst, und vergisst, dass du ein wie oben reservierten String nicht beschreiben darfst und dann die Runtime aussteigt.

    Den VC6 hats nicht gestört.

    Aber es ist so, manch einer schafft es auch, daran immer zu denken.



  • SeppSchrot schrieb:

    Den Nachteil spürst du, wenn du mal auf einen anderen Compiler umsteigst, und vergisst, dass du ein wie oben reservierten String nicht beschreiben darfst und dann die Runtime aussteigt.
    Aber es ist so, manch einer schafft es auch, daran immer zu denken.

    hi sepp,
    ich hab' viel mit verschiedene compilern zu tun, selbst mit solchen die fehlerhaften code erzeugen (icc12 😡 👎 ). die meisten davon packen stringliterale in's flash, also read-only. naja, ich merke mir meistens was beschreibbar ist und was nicht. fehler diesbezüglich fallen früh auf und sind schnell beseitigt. viel blöder finde ich die immer die warnings wenn man mal was nicht-konstantes an so'ne funktion übergibt, die. 'const' haben will.


Anmelden zum Antworten