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;
    
    }
    

Anmelden zum Antworten