Unterschied C-String und Char Array



  • Hallo, wo ist der Unterschied zwischen:

    char string []="Test";
    

    und

    const char* string = Test";
    

    Danke schon mal.



  • Der Anfänger! schrieb:

    Hallo, wo ist der Unterschied zwischen:

    char string []="Test";
    

    und

    const char* string = Test";
    

    Danke schon mal.

    Das erste kompiliert das zweite nicht.



  • Tut mir leid Tippfehler:

    const char* string = "Test";
    


  • Im ersten Fall ist "string" ein 5-elementiges char Array, wobei der Compiler für uns die Zahl der Elemente gezählt hat. Dieses Array wird mit den Zeichen 't', 'e', 's', 't' und '\0' initialisiert.

    Im zweiten Fall ist "string" ein Zeiger auf das erste Zeichen einer "konstanten Zeichenkette" die vom Compiler automatisch erzeugt wurde. Diese Zeichenkette existiert während der gesamten Zeit, die das Programm läuft.


  • Administrator

    Als Ergänzung zu dem was krümelkacker genannt hat:
    Im ersten Fall wird Speicher auf dem Stack reserviert und zwar genau für die Menge, welche es für den String benötigt. Der Speicher ist daher auch beschreibbar und man kann den String, bzw. das char-Array, beliebig überschreiben.
    Im zweiten Fall hat man nur einen Zeiger auf ein konstantes Literal. In diesen Speicher darf man nicht schreiben. Auf dem Stack wird nur der Speicher für den Zeiger angelegt.

    Grüssli



  • und kann wer noch lieberweise erklären was passiert im fall von
    string++;

    für beide fälle ?
    ich habe da was im kopf 🙂


  • Mod

    syko1 schrieb:

    und kann wer noch lieberweise erklären was passiert im fall von
    string++;

    für beide fälle ?
    ich habe da was im kopf 🙂

    Das zweite compiliert, das erste nicht.



  • Danke für die rasche Antwort.

    d.h.
    durch das inkrementieren zeigt er auf das 'e'?

    und für das andere müsste ich das zweite Zeichen eben mit dem Index ansprechen ?!
    string[1];
    Und das Element/Zeichen am Index 1 könnte ich auch überschreiben ?!

    Liege ich da richtig ?


  • Mod

    Drück dich bitte klarer aus. Es ist nicht verständlich, wann du von welchem Code sprichst. Am besten gibst du den Code von dem du redest direkt in deinem Beitrag mit an.

    Höchstwahrscheinlich wurden deine Fragen sowieso schon in diesem Thread beantwortet. Die Beiträge von krümelkacker und Dravere enthalten so ziemlich alles, was es zu diesem Thema zu sagen gibt.


Anmelden zum Antworten