wichtig frage strings



  • danke schon mal für die antworten aber könntet ihr das villeicht nen bisschen einfacher ausdrücken? währ nicht schlecht
    danke



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

    char string[255];
    

    Wobei string hier der Zeiger wäre. oder:

    char *string = new char[255];
    

    Beide obige Strings sind jeweils 255 chars gross, wobei 1 char 1 buchstaben repräsentiert.
    Zum kopieren und verwenden dieser Arrays stehen verschiedene C Funktionen zu verfügung:
    http://cppreference.com/stdstring/

    Ein AnsiString ist eine Klasse, die meist einen c-string enthält, auf die du aber nur mit Funktionen zugreifst:

    class CString
    {
    private char* theString;
    
    public:
      CString();
      void push();
      void pop();
      void Append(char*);
      void Append(CString);
    };
    

    std::string:
    http://cppreference.com/cppstring/

    Es gibt auch andere StringKlassen, die haben eigene Dokumentationen.

    Ich hoffe das war jetzt richtig. 😉
    rya.
    Scorcher24



  • 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.



  • 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