deprecated conversion from string constant to char *
-
Ich habe hier folgenden Code:
char * foo = "A"; if(condition) { foo = "B"; }
Es kompiliert unter linux und windows, aber gcc wirft mir die obige warnung.
In dieser Situation ist es nicht angebracht foo als const char * zu deklarieren, weil er ja zu einem späteren Zeitpunkt geändert wird.
Was ist in solchen fällen die gängige Methode ohne auf std::string zu wechseln?
-
Die richtige Lösung wäre dein Desgin zu ändern und auf std::string umzusteigen.
Eine einfache (und unsichere) Lösung wäre strcpy zu verwenden.
-
const char* besagt nur, dass der Inhalt nicht veraendert werden darf. Das, was du dort als Code zeigst, aendert den Inhalt nicht, sondern nur worauf const char* zeigt. "A" als auch "B" sind selbst const char*. Also sollte foo auch von const char* sein. Ein foo[0] = 'C' ist sowieso verboten (ob 's verboten ist, weiss ich nicht genau, jedoch wuerde ich es nicht erlauben), so aendert man den Inhalt auf den foo zeigt.
Ich wuerde const char* benutzen, sofern der String unveraendert bleibt. std::string fuer alles andere. Neben strcpy existiert auch noch strncpy das einige Nachteile von strcpy umgeht.
-
Seikilos schrieb:
...
In dieser Situation ist es nicht angebracht foo als const char * zu deklarieren, weil er ja zu einem späteren Zeitpunkt geändert wird....Davon würde ich intensiv abraten!!!
Der Versuch, einen Literal zu ändern, resultiert oft in garstigen Fehlern!Wenn Du also zu faul (
) bist, um auf std::string zu wechseln, spricht nichts gegen:
char const * foo = "A"; if(condition) { foo = "B"; }
oder gleich:
char foo = 'A'; if(condition) { foo = 'B'; }
Was nicht geht (und Du evtl. damit verwechselt hast), ist:
char * const foo = "A"; if(condition) { foo = "B"; // FEHLER!! }
Gruß,
Simon2.
-
Seikilos schrieb:
In dieser Situation ist es nicht angebracht foo als const char * zu deklarieren, weil er ja zu einem späteren Zeitpunkt geändert wird.
Falsch. Du änderst den Pointer, nicht den Inhalt. Der Inhalt bleibt jeweils konstant, also ist const char* völlig richtig.
-
Danke für die Erklärung Leute.
Ich hab in der Tat const char * mit char * const verwechselt.