Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

warning: deprecated conversion from string constant to ‘char*’

4 views
Skip to first unread message

iwl

unread,
Dec 3, 2009, 10:30:08 AM12/3/09
to
Hallo Leute

warning: deprecated conversion from string constant to ‘char*’

bekommt man das besser weg als jedes mal (char *) vor "xyz" zu
schreiben?

Georg Bauhaus

unread,
Dec 3, 2009, 10:49:31 AM12/3/09
to
iwl schrieb:
> Hallo Leute
>
> warning: deprecated conversion from string constant to �char*�

>
> bekommt man das besser weg als jedes mal (char *) vor "xyz" zu
> schreiben?

Die Variable, die auf den konstanten string zeigt, als const char*
deklarieren (f�r konstante Strings ist das wohl angemessen.)

Markus Wichmann

unread,
Dec 3, 2009, 11:03:48 AM12/3/09
to
iwl (Ingo...@gmx.de) schrieb:

Man könnte darüber nachsinnen, was die Meldung bedeuten soll, und
eventuell daran denken, die Variable, der da eine Stringkonstante
zugewiesen wird, zum Typ "char []" umzudeklarieren.

HTH,
Markus
--
Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.
-- gUnter nanonüm in de.alt.anime

Jan Seiffert

unread,
Dec 3, 2009, 12:38:11 PM12/3/09
to
iwl schrieb:

Ich habe so das Gefuehl das dein Problem C++ ist, nicht C.
C++ und C sind zwei verschiedene sprachen.
C++ ist hier offtopic.

Ich denke, du suchst die cstring() methode oder sowas. Oder wars c_string()?
Ach, c_str() heist das Kind.
Kannst ja mal gucken ob der compiler "Hallo".c_str() frisst, sonst muss das wohl
durch den Konstruktor oder reinterpretid gecasted werden oder was auch immer da
wieder fuer ein C++ schmonz noetig ist.

Gruss
Jan

--
With what, your bare hands?

Marcel Müller

unread,
Dec 3, 2009, 2:44:34 PM12/3/09
to
iwl wrote:
> warning: deprecated conversion from string constant to �char*�

>
> bekommt man das besser weg als jedes mal (char *) vor "xyz" zu
> schreiben?

Ja, indem man es nicht einem char*, sondern einen const char* zuweist
oder �bergibt.

Wenn das nicht geht, weil z.B. das Funktionsargument indirekt ver�ndert
wird, hat man sowieso undefiniertes Verhalten.


Marcel

Michael Schumacher

unread,
Dec 4, 2009, 2:44:19 PM12/4/09
to
iwl wrote:

Du bekommst es damit weg, und wenn Du Glück hast, funktioniert
das sogar so, wie Du Dir das vorstellst. Ich weiß ja nicht, was
genau Du vorhast, aber eine String*konstante* als -variable zu
übergeben, ist generell eine ganz schlechte Idee. Ohne näheren
Kontext ist es allerdings unmöglich, eine Lösung vorzuschlagen
(außer dynamischer Allokation und folgender String-Zuweisung).


mike

iwl

unread,
Dec 7, 2009, 11:06:08 AM12/7/09
to

Um das Problem zu konkretisieren:

func("Text", a, b) führt zu der Meldung

Schuld ist vermutlich der, der func deklariert hat ohne const.

Georg Bauhaus

unread,
Dec 7, 2009, 11:47:01 AM12/7/09
to
iwl schrieb:

> Um das Problem zu konkretisieren:
>
> func("Text", a, b) f�hrt zu der Meldung

>
> Schuld ist vermutlich der, der func deklariert hat ohne const.

Da w�ren demnach frei eingestreute Literale wie "Text"
in func("Text", ...). Da sie keinen Namen haben und ihrer
Bedeutung nach nur von Menschen unterschieden werden
k�nnen (Fehlermeldung?, Schl�ssel? (hash), "Bin�rstring"-Trick?
u.a.m.), b�te sich bei der Gelegenheit eine Verbesserung
an, die 2 Fliegen mit 1 Klappe erschl�gt:
Setze Markierungen um die Literale, die dann zweierlei
leisten,

(1) sie machen die Literale der Sorte nach auffindbar

(2) sie bringen den compiler wie gew�nscht zum Schweigen

#define I18N_Schuldig(s) ((char*)s)
#define I18N_w(s) ((char*)s)
#define I18N_r(s) ((const char*)s)

func(I18N_Schuldig("Text"), a, b);

Bestimmt gibt es bessere oder der Aufgabe angemessenere Namen.

0 new messages