wichtig frage strings



  • moin leutz

    könnt ihr mir sagen was der unterschied zwischen einem AnsiString und einem nullterminierten strings ist?
    ausserdem würde ich noch gerne wissen welche unterschiede es zwischen den beiden typen gibt und wie sie verwendet werden.

    danke schon mal für antworten
    und ich hoffe das anworten kommen ist nämlich wichtig

    also denn greetz and cu



  • Ein AnsiString ist eine Klasse. Wenn man von Null-terminierten String redet meint man meistens ein char oder const char*



  • schmiddie86 schrieb:

    könnt ihr mir sagen was der unterschied zwischen einem AnsiString und einem nullterminierten strings ist?

    Der Unterschied liegt darin, dass C++ AnsiString nicht kennt, C-Strings aber schon.

    schmiddie86 schrieb:

    ausserdem würde ich noch gerne wissen welche unterschiede es zwischen den beiden typen gibt und wie sie verwendet werden.

    Da AnsiString afaik irgendwas Borland spezifisches ist, wäre deine Frage dort evtl. besser aufgehoben.

    Der grundlegende Unterschied besteht im Grunde darin, dass AnsiString ein Klasse ist. Also komplett mit Member-Funktionen usw. Ein C-String ist lediglich eine Datendefinition, die in C++ mit char* repräsentiert wird. Damit man mit C-Strings allerdings auch arbeiten kann, gibt es diverse Funktionen dafür, zB strlen oder strcpy.

    Im Grunde ist aus C++ Sicht beides aber relativ uninteressant. Lediglich C-Strings werden für Literale verwendet, ansonsten arbeitet man mit std::string.



  • 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