Forum: Mikrocontroller und Digitale Elektronik strcpy discards qualifiers from pointer


von imax (Gast)


Lesenswert?

Es geht um AVR-Studio mit WINAVR(gcc)
strcpy (ssid,"abc");

warning: passing argument 1 of 'strcpy' discards qualifiers from pointer 
target type dann habe ich folgendes versucht:

strcpy ((const char*)ssid,"abc");  // ging auch nicht

von Oliver (Gast)


Lesenswert?

Prototype: char strcpy(char *s1, const char *s2);

Wenn der Compiler Argument 1 bei dir anmeckert, dann ist ssid kein char*

Oliver

von Huch (Gast)


Lesenswert?

>strcpy ((const char*)ssid,"abc");  // ging auch nicht

Um die Warnung zu beseitigen musst Du die übergebene Variable so casten, 
dass sie zu dem Parameter der Funktion passt. Die erneute ausdrückliche 
Angabe der Qualifzierer der Variable nützt Dir nichts. Sie ruft ja 
gerade die Warnung hervor.

von Maxx (Gast)


Lesenswert?

Qualifier ist das "const"
Qualifier bei pointern beziehen sich immer auf den Zieltyp. Hier macht 
das auch wenig Sinn, weil sich der Inhalt des Ziels ja auch verändern 
soll.

Const bei ssid* weglassen oder einmalig den Wert zuweisen statt strcpy.

von !Gast (Gast)


Lesenswert?

Wie ist ssid definiert? Mehr Input (=Quellcode) bitte!

von !Gast (Gast)


Lesenswert?

(Vergiss es, zu langsam)

von Huch (Gast)


Lesenswert?

>Qualifier bei pointern beziehen sich immer auf den Zieltyp. Hier macht
>das auch wenig Sinn, weil sich der Inhalt des Ziels ja auch verändern
>soll.

Das muss man doch noch etwas differenzieren, aber mein Rat von oben 
macht tatsächlich keinen grossen Sinn, da der Inhalt auf den der Zeiger 
zeigt verändert werden soll.

const kann sich sowohl auf den Zeiger selbst als auch auf den am Ort des 
Zeigers stehenden Inhalt beziehen. Um das zu unterscheiden, ist die 
position des "const" in der Deklaration entscheidend.

Tatsächlich macht const char * x den Inhalt auf den X zeigt konstant 
aber nicht den Zeiger.

Hingegen ist bei char * const y den Zeiger konstant hingegen aber nicht 
den Inhalt.

von Karl H. (kbuchegg)


Lesenswert?

!Gast schrieb:
> (Vergiss es, zu langsam)

Nicht wirklich.
Das vergessen mein ich.

Die Fehlermeldung deutet nämlich auf ein ernsthaftes Problem hin.
Wenn er bei

   strcpy (ssid,"abc");

im ersten Argument ein const wegcasten muss, dann kann das tatsächlich 
ein schwerwiegendes Problem sein! Ein const wegcasten zu müssen, ist des 
öfteren tatsächlich gefährlich und sollte nicht auf die leichte Schulter 
genommen werden. Denn letztendlich hat man dann seinen Compiler 
angelogen! Der verlässt sich nämlich darauf, dass die Dinge, die man ihm 
als const angegeben hat, auch tatsächlich konstant sind und ihren Wert 
nicht über dubiose Praktiken ändern.

Daher: mehr Code!
Dann kann man entscheiden, ob das wegcasten eines const eine 
Kavaliersdelikt ist, oder ob da mehr dahintersteckt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.