wichtig frage strings



  • Man sollte noch hinzufügen, dass die C-Strings am Ende das Sonderzeichen: '\0' stehen haben, um das Ende für Funktionen zu Markieren.

    d.h.:

    char txt1[5];
    char txt2[6];
    
    txt1 = "Hello"; //Fehler, Array zu klein, da 5+'\0' sind 6 Zeichen
    txt2 = "Hello"; //OK
    


  • schmiddie86 schrieb:

    ja scorcher das war gut.

    wenn ich das jetz richtig verstanden habe ist AnsiString einfach nur ne klasse die aus c-string (bzw. nullterminierter string oder ist das mit nullterminiert jetz falsch 😕 ) funktionen zusammen gebastelt wurde um das leben eines programmierers einfacher zu gestalten.

    Ich weiß nicht wie AnsiString implementiert ist aber generell müssen String-Klassen natürlich intern nicht unbeding Null-terminiert sein.



  • Man könnte sie auch so aus Jux als Verkettete Listen Implementieren. 😃



  • AnsiString sieht dann wohl so aus:

    AnsiString text1;
    text1 = "hallo";
    

    und als nullterminierter string dann wohl so:

    char text2[6];
    text2 = "hallo";
    

    intern sieht das char array dann so aus:

    0    1    2    3    4    5
    ["h"]["a"]["l"]["l"]["o"]["0"]
    

    ich hoffe jetz habe ich es gerallt!



  • Scorcher24 schrieb:

    Ein Zeiger auf ein Array mit char ist ein c-string:

    char string[255];
    

    Wobei string hier der Zeiger wäre.

    Nein, string ist hier kein Zeiger.

    Scorcher24 schrieb:

    Beide obige Strings sind jeweils 255 chars gross

    Auch hier liegt ein Missverständnis vor. In den Beispielen gibt es noch keine Strings, dies sind lediglich 2 uninitialisierte Felder von jeweils 255 Elementen vom Typ char. Und sofern diese als Strings interpretiert werden, ist deren Grösse (Länge) undefiniert.



  • schmiddie86 schrieb:

    und als nullterminierter string dann wohl so:

    char text2[6];
    text2 = "hallo";
    

    intern sieht das char array dann so aus:

    0    1    2    3    4    5
    ["h"]["a"]["l"]["l"]["o"]["0"]
    

    ich hoffe jetz habe ich es gerallt!

    Fast:

    text2[5]!='0' && text2[5]=='\0'
    

    Die "normale" '0' kann man auch inhaltlich nutzen.



  • und wenn man es dann so einsetz ist es mit dem ende von '\0' für den compiler ein abgeschlossener string aus chars´s. daher kommt dann wahrscheinlich null-terminiert wie abgeschlossen oder ende. richtig?



  • Genau!



  • ah perfekt 🙂
    danke für eure hilfe leutz.



  • np


Anmelden zum Antworten