Const vor Funktion
-
drakon schrieb:
Und wie C-Strings nun mal sind, darf man sie nicht verändern.
interessante theorie. dann frag is mich nur, mit welchem trick 'strcat' das hinkriegt.

-
+fricky schrieb:
drakon schrieb:
Und wie C-Strings nun mal sind, darf man sie nicht verändern.
interessante theorie. dann frag is mich nur, mit welchem trick 'strcat' das hinkriegt.

Naja. Die strings ansich darfst du nicht verändern, sonst musst du eine der C-Funktionen nehmen, welche den string an sich auch nicht verändenr, sondern einen neuen entsprechend anpassen.
-
drakon schrieb:
Naja. Die strings ansich darfst du nicht verändern, sonst musst du eine der C-Funktionen nehmen, welche den string an sich auch nicht verändenr, sondern einen neuen entsprechend anpassen.
strcat z.b: http://www.cplusplus.com/reference/clibrary/cstring/strcat/
hängt einen string an einen bestehenden string an, verändert ihn also. deshalb ist der erste parameter auch ein char*, kein const char*.

-
drakon, meintest du vielleicht Stringliterale?
P.S. +fricky, du treibst dich im C++-Forum rum? Etwa um Aussagen über C strengstens zu überwachen?

-
+fricky schrieb:
drakon schrieb:
Naja. Die strings ansich darfst du nicht verändern, sonst musst du eine der C-Funktionen nehmen, welche den string an sich auch nicht verändenr, sondern einen neuen entsprechend anpassen.
strcat z.b: http://www.cplusplus.com/reference/clibrary/cstring/strcat/
hängt einen string an einen bestehenden string an, verändert ihn also. deshalb ist der erste parameter auch ein char*, kein const char*.

Ich habe mit C-String grundsätzlich
const char*gemeint. War vielleicht ein wenig unklar ausgedrückt. Aber die dürfen per Definition nicht verändert werden. (die char's natürlich).
-
lol
-
Nexus schrieb:
P.S. +fricky, du treibst dich im C++-Forum rum? Etwa um Aussagen über C strengstens zu überwachen?
ach nö, das war eher ein unfall. ich war etwas verpeilt und wollte auf einen beitrag des C-forums klicken. normalerweise schaue ich hier so gut wie nie rein.

-
ist gar nicht so konstant, wie man denken könnte:
const char* c = "blah"; c = "blubb"; puts(c);das schon:
const int a = 0; a = 1;ist schon doof das const char*.
bringt nix, deutet allenfalls an bzw. macht deutlich, das der zeigerinhalt nicht verändert werden soll.
-
Das ist genauso konstant, wie alles andere..
Du musst das nur richtig lesen..Sonst machst du halt das hier:
const char *const c = "blah"
-
c0nstant0r schrieb:
...deutet allenfalls an bzw. macht deutlich, das der zeigerinhalt nicht verändert werden soll.
so soll das auch sein. versuchste über den zeiger das gezeigte zu verändern, beschwert sich der compiler.

-
zusätzlich zum deutlich machen konstanter speicherobjekte gibt es noch eine warnung vom compiler, was fehler verhindern kann:
char* a = "blah"; char b[] = "blubb"; // deutlich machen, das zeigerinhalt nicht verändert werden darf // ansonsten gleich wie char* const_ret() const char* const_ret() { return a; } char* ret() { return b; } int main (void) { char* d; d = ret(); *d = 'B'; // ok puts(d); d = const_ret(); // warnung vom compiler *d = 'B'; // autsch und tschüss return 0; }