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



  • @MasTah : Hallo, Gruß aus Aachen nach Aachen. Kann man dich auch irgendwie antexten, so via Email ??



  • Warum ignorierst du Bashars Antwort, Tantor?



  • Ich ignoriere seine Antowrt nicht. Wie kommst du darauf.
    Übrigens auch danke für die Antworten.
    Hatte halt nur festgestellt dass halt noch ein Aachener hier im Forum ist und da freut man sich doch drüber oder ?
    Hat jetzt keinen Hintergedanken gehabt.
    BASHAR's Antwort hat mir am meisten gebracht.
    Zusammenhang zwischen char* und string war mir ja auch fast klar, nur irritierte mich CString aufeinmal aber wenn das was mit MFC zu tun hat, dann weiß ich ja warum ich das nicht zuordnen konnte.

    Sollte man denn jetzt beim C++ programmieren lieber mit char* arbeiten oder mit string, denn ich bevorzuge eigentlich string, der ist komfortabler, oder ???



  • Original erstellt von Tantor:
    Sollte man denn jetzt beim C++ programmieren lieber mit char arbeiten oder mit string, denn ich bevorzuge eigentlich string, der ist komfortabler, oder ???*

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

    [ Dieser Beitrag wurde am 12.06.2003 um 11:53 Uhr von Shade Of Mine editiert. ]



  • @Tantor: Hey, Klenkes!!! 😃

    [ Dieser Beitrag wurde am 12.06.2003 um 15:19 Uhr von MaSTaH editiert. ]



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

    Das ist doch gemein den nicht-Englisch-Sprechenden gegenüber. Ich will aber keine Diskussion darüber anzetteln, ob jeder, der mit Programmieren zu tun hat auch Englisch können muss.



  • "Bevorzugt String Operationen gegenüber C-artigen/ähnlichen String Funktionen"

    ^Besser ?

    @Mastah zufrieden 😉

    Devil

    [ Dieser Beitrag wurde am 12.06.2003 um 15:38 Uhr von devil81 editiert. ]



  • Original erstellt von Helium:
    Das ist doch gemein den nicht-Englisch-Sprechenden gegenüber. Ich will aber keine Diskussion darüber anzetteln, ob jeder, der mit Programmieren zu tun hat auch Englisch können muss.

    Also die paar Brocken mindestens. Es muss doch schließlich auch jeder Weinkenner die Weinsorten aussprechen können! "Ähh, wie heißt das jetzt? Bordo oder Bohrdehjauks?" 😃

    EDIT1: Und zur Not gibt es ja auch noch die "Sprach-Tools von google" 😉 . Die übersetzen nicht perfekt aber ausreichend um es zu verstehen.

    EDIT2: @devil81: Was heißt denn jetzt "Style" 😉 ?

    [ Dieser Beitrag wurde am 12.06.2003 um 15:37 Uhr von MaSTaH editiert. ]


Anmelden zum Antworten