Übergabe von const-Parameter an strcpy



  • Hallo zusammen,
    (Nur als Beispiel die Funktion "strcpy" aus der C-Standardbibliothek)
    Der zweite Parameter der Funktion "strcpy" sollte "const char*" sein.
    Was das bedeutet ist mir soweit bewusst. Meine Frage:

    Übergebe ich einen NICHT konstanten String (char*), funktioniert
    alles trotzdem (auch ohne Fehlermeldung seitens Compiler [gcc]).
    Daher habe ich mir die Implementierung angeschaut aber geholfen
    hat das auch nicht. Warum soll man einen konstanten String angeben
    obwohl das effektiv gar keinen Unterschied macht? Gibt es dazu eine
    genaue Erklärung? Und warum meldet mir der Compiler keinen Fehler?

    Danke im Voraus :).
    Grüße,
    Liquid64

    P.S.: Die Implementierung habe ich mir dort angesehen:
    http://en.wikibooks.org/wiki/C_Programming/Strings#The_strcpy_function



  • Es ist nur eine Garantie von strcpy und anderen Funktionen, die einen const char* entgegennehmen, dass nicht in den Speicher geschrieben wird, die Zeichenkette also nicht verändert wird.

    Die Konvertierung char*->const char* ist kein Problem, umgekehrt schon und führt i.A. zu undefiniertem Verhalten.



  • Das hilft
    1. dem Compiler (beim compilieren der Funktion strcpy()) zu erkennen, ob aus versehen in den String geschrieben wird.
    2. dir zu erkennen, das der zweite Parameter nicht verändert wird.



  • Es könnte dem Compiler auch erlauben, weine Fehler zu werfen bei

    strcpy("hallo",h);
    


  • Vielen Dank, ich denke das beantwortet meine Frage :).


Anmelden zum Antworten