C-Strings vergleichen



  • Trotzdem hast du das sehr schön gemacht. Vorallem die Tatsache, dass es keinen Überlauf geben kann beeindruckt mich durchaus. Ich hätte das jetzt anders erwartet. 😉

    Die fixen Größen sind natürlich nicht unbedingt realistisch. Denn man weiß nicht immer, wie groß die zu erwartenen Daten sind und will diese auch nicht einschränken. Entsprechend müsstest du dann mit dynamischem Speicher hantieren und dann wird im Zusammenhang mit C Strings so richtig ekelig.

    Fazit: Es ist gut, wenn man sich mit C Strings auskennt, aber dann wird man auch wissen, dass sie gefährlich sein können und entsprechend auf std::string umschwenken.



  • C++ Primer kann ich mir kostenlos über 2/3 Monate aus der Bibliothek ausleihen.
    kann ich dann "C++ von A bis Z" nacher als Nachschlagewerk nutzen oder soll ich das komplett in den Müll werfen.
    Gibt es vielleicht noch ein neueres gutes C++ Buch als den C++ Primer?



  • Danke Felixxx.

    Ganz ehrlich der Thread gehört für mich weniger ins C++ Forum. Fakt ist, dass der std::string einfacher in der Verwendung und gleichsam unanfälliger für Fehler ist. Es ist gut den C-String zu kennen, man sollte aber bei der C++ Programmierung darauf nach Möglichkeit verzichten.

    Dies führt in der Regel zu Ankerkennung und großer Ehre unter den C++ Anhängern! 😃



  • Thx @ ,,,, Wahres Fazit 🙂 Ich versuche jezz mal Hooks zu verstehen 🙂 Damit ich mal wieder was spanndendres mache als Konsolen-Crap .

    @ HighLigerBiMBam Wofür Danke ? Hab ich wieder irgendwelche Theorieren mit Fehlern bewiesen ? .......



  • Nein Felix, ich habe mir beim lesen nur gedacht, dass bestimmt keine C-String Antwort folgt 😉

    👍



  • Hä ich komme nicht ganz mit 😛 Die "Aufgabenstellung" war ja genau das mit C-Strings zu machen ? Oder was meinste jetzt ?



  • Ich fand ja auch den C-String Konter gut 🙂



  • @ skilled Ich habe einige Argumente genannt ... schau doch nochmal durch.

    Das mit dem Speicherleck hast du einfach falsch verstanden, auch das nochmal durchschauen. Selbiges gilt für die Frage nach der Bedeutung.



  • Sobald man exceptionsicheren Code schreiben möchte, kann man dynamisch allokierte C-Strings quasi nicht mehr verwenden - dafür braucht man einfach RAII.

    Das Problem an dem Wolf-Buch, ist dass es kein idiomatisches C++ lehrt, sondern C mit Klassen. Das manifestiert sich dann an solchen Beispielen wie std::string contra Char-Array.

    C++ ist auf der Abstraktionsleiter nochmal einige Stufen über C und das sollte in einem Lehrbuch für Anfänger auch so gelehrt werden, vor allem da die Abstraktion dem Programmierer das Leben erleichtert - bei minimalen Performanceverlust.
    Und genau das macht den "C++ Primer" zu einem guten und "C++ von A bin Z" zu einem schlechten Buch.



  • Oberon_0 schrieb:

    ,,,, schrieb:

    Es ist in einigen Situationen sogar erforderlich mit C Strings zu arbeiten.
    Das betrifft insbesondere in C geschriebene Schnittstellen, wie der WinAPI.

    Aber nur wenn die API einen veränderbaren Zeiger auf den C-String erwartet (d.h. char* ). Sonst gibt es ja die Funktion c_str , die man immer verwenden kann, wenn ein nur-lese-string erwartet wird (d.h. const char* ).

    Nicht mal dann. Es gibt std::vector<char> und sonst halt noch std::tr1::array . Ich empfehle auch wegen RAII dringend std::vector<char> zu verwenden.

    @Felixxx,
    Wenn du lieber schöne GUIs haben willst oder irgendwelche kleine Tools basteln möchtest, dann ist vielleicht C++ die falsche Sprache? Auf Windows kann man dafür zum Beispiel C# empfehlen. Ansonsten ist wohl durchaus auch Java eine Empfehlung wert. Sprachen haben nunmal auch ihre Stärken und Schwächen bei den Einsatzzwecken. Für die GUI Programmierung oder der schnellen Verwirklichung von kleinen Tools ist C++ nicht gerade optimal.

    Grüssli



  • Natürlich stammen C-String aus C, aber man benutzt sie trotzdem sehr häufig in C++.

    Deine C-Strings liegen immernoch im speicher und werden sogar verdopelt wenn du nen std::string damit initialiesiert. Das sollte man zumindest wissen um Schpeicherlecks zu vermindern.

    der speicher für das char array wird zB nicht automatisch freigegeben das heißt man muss das selbst erldigen.
    Aber viele wissen nicht einmal, dass jedesmal wenn du iwo "bla" schreibst eig nen char array erstellt wird.

    Das ist schlicht und ergreifend Blödsinn. Und dann deine zusammengebastelte Lösung, die nur funktioniert, wenn der Anwender freundlicherweise weniger als 50 Zeichen schreibt 🙄

    Du sagst, dass man C-Strings verwenden kann, wenn, ja wenn man alles Dahinterliegende und alle Funktionen mit ihren Fallstricken verstanden hat. Das stimmt, ist aber bei dir und anderen Anfängern offensichtlich nicht der Fall. Warum genau soll std::string nun auf Seite 695 hinter OOP, Templates, der STL und Exception-Handling (!!!) stehen, während C-Strings am Anfang des Buchs behandelt werden?

    Edit: Auf RAII bist du noch gar nicht eingegangen, aber wahrscheinlich fliegt bei J. W. erst auf Seite 662 die erste Exception und er macht auch nicht klar, wofür man RAII sonst gebrauchen könnte 🙄



  • No its not.

    Natürlich funzt die nur wenn der User freundlicherweise <=50 Chars eingibt. Hatte ich auch dazu gesagt. Man kann es aber auch beliebig machen.
    Ich finds auch ganz toll, dass du es vermutlich wesentlich besser gelöst hättest. 👍
    Von RAII habe ich noch nie gehört.

    @dravere_off :
    ? Ich hatte nie erwähnt , dass ich GUIs proggen will.
    Oder willst du mir jetzt erzählen, dass C++ alleine für Consolo-Apps gedacht ist ?



  • Felixxx schrieb:

    No its not.

    Welches genau?

    Natürlich funzt die nur wenn der User freundlicherweise <=50 Chars eingibt. Hatte ich auch dazu gesagt. Man kann es aber auch beliebig machen.

    Warum machst du es dann nicht?

    Von RAII habe ich noch nie gehört.

    Das sind eben Punkte, bei denen das Wolf-Buch ganz einfach schlecht ist. Aber die kannst du nicht so einfach erkennen wie Syntaxfehler. Kommentare wie

    Will Helm schrieb:

    Sobald man exceptionsicheren Code schreiben möchte, kann man dynamisch allokierte C-Strings quasi nicht mehr verwenden - dafür braucht man einfach RAII.

    Das Problem an dem Wolf-Buch, ist dass es kein idiomatisches C++ lehrt, sondern C mit Klassen. Das manifestiert sich dann an solchen Beispielen wie std::string contra Char-Array.

    kannst du gar nicht verstehen, wenn du nicht weißt, was RAII ist. Du willst also konkrete Kritik am Buch von uns hören, kennst dich aber gar nicht genug aus, um die Kritik zu verstehen.



  • Naja ich denke RAII sprengt bisschen den Rahmen eines Anfängerbuches, oder etwa nicht ? Es gibt tausende spezielle Sachen/Besonderheiten die ich , selbst nachdem ich das gesamte Buch durchgelesen habe ( was ich nicht werde ), nicht kennen werde/würde. Jetzt erzähl mir nicht, dass das bei anderen Büchern anderes sei. Vllt. wennn das Buch 5k Seiten hat dann nicht.



  • Ich gebs auf 🙄 Hab übrigens nie gesagt, dass Wolf RAII erklären soll (wäre aber ein netter Zug von ihm), sondern hab nen Grund pro std::string genannt.


  • Mod

    Michael E. schrieb:

    Ich gebs auf 🙄 Hab übrigens nie gesagt, dass Wolf RAII erklären soll (wäre aber ein netter Zug von ihm), sondern hab nen Grund pro std::string genannt.

    Ich würde sogar sagen, RAII ist Pflicht, auch in Anfängerbüchern, auch innerhalb der ersten 1000 Seiten.

    @Felixxx: RAII ist keine exotische Besonderheit, die man nicht unbedingt brauchen würde. Wenn dies nicht kommt, ist das ein klarer Fehler im Buch.



  • SeppJ schrieb:

    Ich würde sogar sagen, RAII ist Pflicht, auch in Anfängerbüchern, auch innerhalb der ersten 1000 Seiten.

    Stimmt eigentlich, vor allem wenn es ein Kapitel über Exception Handling gibt.



  • Finally 😛
    Ne, aber soweit ich das sehe stützt sich Eure Kritik an dem Buch auf der Tatsache, dass C-String vor der String Klasse besprochen wird und das Buch somit komischerweise erst C-Elemente aufgreift bevor es auf C++-Hauptelemente eingeht. Das stimmt schon, ja. Aber ich finde es halt nicht so tragisch; schließlich weiß ich, dass auch std::string exisitiert, und die Klasse auch einige Vorteile gegebenüber C-Strings bietet. Die Gefahren von C-Strings sind ja im Buch genügend besprochen worden, auch wenn von RAII die die Rede war.


  • Mod

    Felixxx schrieb:

    Ne, aber soweit ich das sehe stützt sich Eure Kritik an dem Buch auf der Tatsache, dass C-String vor der String Klasse besprochen wird und das Buch somit komischerweise erst C-Elemente aufgreift bevor es auf C++-Hauptelemente eingeht.

    Nein, dies ist nur eines der Beispiele, von denen wir auch denken, dass man sie als Anfänger verstehen kann. Die Syntaxfehler ignorierst du ja. Und dieses Beispiel ignorierst du auch. Und die anderen Sachen die falsch sind, verstehst du gar nicht. Was soll man da noch weiter diskutieren?



  • Nein, braucht man in der Tat nicht weiter zu disktueiren, insofern ich das Buch 1.) nicht weiterlesen werde und 2.) schon so weit gelesen habe, dass es für die C-String Sache zu spät ist.

    Ich denke es macht auch fast wenig Sinn sich ein anderes Buch zu holen, sonst darf ich nochmal ~ 500 Seiten schon bekannte Sachen lesen, mit dem Unterschied dass die Codes Syntaxfehlerfrei sind ( was mir eig. ziemlich egal ist, aber es zeugt schon von Schlampigkeit, ist auch wahr) und warsch. besser zu C++ passen.

    Wie auch immer, Ihr werdet schon Recht haben, was das Buch betrifft.
    ->lastword<-


Anmelden zum Antworten