Unterschied zwischen char*,string,cstring ?



  • Hallo zusammen,

    irgendwie versteh ich nicht so ganz den Unterschied zwischen

    char* , string und cstring ???? Wo sind die könnte mir das mal wer erklären, bin irgendwie blöd heute ??



  • char* ist ein Pointer auf ein Array aus char (also Zeichen). string ist eine Stringklasse der STL und portabel. CString entspringt den MFC und ist Windows/MFC-Spezifisch. Die meisten Stringklassen basieren aber intern auf char-Arrays...



  • char * ist ein Zeiger auf ein Zeichen, mehr eigentlich nicht. Manche erwarten irgendwelche Magie vom char-Zeiger, aber die gibt es nicht, es ist schlicht und einfach nur eine Adresse. Wenn eine C-Funktion einen String erwartet, dann will sie einen solchen Zeiger. Sie geht dann davon aus, dass an dieser und den folgenden Adressen ein String im Speicher liegt, dessen Ende durch eine 0 markiert ist. Eine Funktion, die eine Zeile ausgibt, würde man vielleicht so implementieren:

    void puts(char * str) {
      while (*str != 0) {
        putchar(*str);
        ++ str;
      }
      putchar('\n');}
    

    string (genauer: std::string) ist eine Klasse, die eine Zeichenkette repräsentiert. Als solche hat sie überladene Operatoren zum Elementzugriff ([]), Methoden z.B. zum Suchen oder um die Länge zu bekommen, Konstruktoren und einen Destruktor (wie jede vernünftige Klasse). Wie genau die String-Daten repräsentiert werden geht dich als Nutzer nichts an. puts würde man da vielleicht so implementieren:

    void puts(string str) {
      string::size_type len = str.length();
      for (string::size_type j = 0; j < len; ++j)
        putchar(str[j]);
      putchar('\n'); 
      // PS: Man vergebe mir die Verwendung der stdio-Funktionen ;)
      // PPS: Wieso zur Hölle wird [i] in code-Tags als kursiv interpretiert?
    }
    

    cstring kenn ich nicht, meinst du CString? Das ist eine MFC-Klasse, die von der Idee her das gleiche leistet wie std::string. Natürlich gibt es Detailunterschiede in der Schnittstelle, ausserdem isses natürlich MFC, während std::string in jeder konformen C++-Implementation vorhanden ist.

    Fazit: Um Bjarne Stroustrup zu zitieren: "Prefer string operations to C-style string functions"

    [ Dieser Beitrag wurde am 12.06.2003 um 11:31 Uhr von Bashar editiert. ]

    [ Dieser Beitrag wurde am 12.06.2003 um 11:32 Uhr von Bashar editiert. ]

    [ Dieser Beitrag wurde am 12.06.2003 um 11:33 Uhr von Bashar editiert. ]


Anmelden zum Antworten