strcpy discards qualifiers from pointer

Gast #1925335
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.
Gast #1925339
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.
Gast #1925375
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.
#1925379
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.