C++] Strukturen



  • Ich fande es auch lustig, dass er immer wieder sagt, dass alte Zeiger im C-Style da nicht hingehören, veraltet und unsicher sind. Trotzdem benutzt er sie das ganze Buch über - was soll das?
    Er widerspricht sich selbst andauernd. Und alles mit dem Argument:

    Jürgen Wolf: C++ von A bis Z, Kapitel 2. C-Strings, S. 164 schrieb:

    Ihnen ist sicher aufgefallen, dass die Verwendung von C-Strings recht umständlich ist, und häufig kann eine falsche Verwendung zu gefährlichem Code, wie zum Beispiel Pufferüberläufeb (Buffer Overflow), führen. [...]

    Leider hat die Vergangenheit gezeigt, dass sich viele Programmierer einfach nicht an diese Regeln gehalten haben, so dass heute kein Tag vergeht, an dem nicht wiede reine Sicherheitslücke in einem programm gefunden und gegebenenfalss ausgenutzt wurde. [...]

    Und aus dem Grund, dass die C-Strings recht umständlich zu bedienen sind und der Sicherheitsaspekt häufig vernachlässigt worden ist, wurde in C++ die string -Klasse eingeführt, die erheblich einfacher zu verwenden ist, mehr Funktionalität bietet und vor allem erheblich sicherer ist. Aber wie bereits erwähnt - da es noch viele Zeilen C-Code gibt, müssen Sie sich als ernsthafter C++-programmierer auch mit C-STrings befassen. Und wenn die Ausführgeschwindigkeit auch noch von Bedeutung ist (aber nur dann), sind die C-Strings immer noch wesentlich effizienter. [...]

    Die Klasse string wird dann auf Seite 695 beschrieben, davor wird immer const char* verwendet.. Aha. 🙄
    Er sagt ja auch, dass sich ein C++-programmierer häufig mit altem C-Code rumprügeln muss. Ich kann das bis jetzt nicht bestätigen (außer wenn sich hier Leute melden, die aus einem völlig veraltetem Buch [C++ von A bis Z :D] oder einem alten Kurs C++ lernen) - was sagt ihr dazu?



  • Na ja, WinAPI, OpenGL und diverse Bibliotheken arbeiten noch mit C-Strings. Im alten Standard muss man für fstream auch die Strings zu C-Strings machen... Die begegnen einem schon überall und immer wieder. Und es ist wichtig, dass man den internen Aufbau versteht. Ich würde die Dinger schon erklären und lehren, aber halt nicht bis zum Erbrechen.

    Cool fände ich in C++ aber den Ansatz Strings vor Arrays zu erklären und bei der Erklärung von Arrays dabei langsam wieder string zu erklären (so ist ein string eigentlich auch nur eine Verkettung von chars). Und dann: Was, wenn wir nicht nur Zeichen verketten wollen, sondern ganz andere Objekte? Und dann kommt der Sprung zu den Containern.

    Hm, ich hätte Lust ein C++-Tut zu schreiben. 🙂



  • Eisflamme schrieb:

    Ich würde die Dinger schon erklären und lehren, aber halt nicht bis zum Erbrechen.

    ..und nicht gleich zu Beginn. Ich würde erst erklären wie man sie benutzt, dann erklären, wie sie denn funktionieren. Vorher sollte man auf std::vector und co eingehen, finde ich.



  • Durch zitierst den letzten Satz meines ersten Absatzes, um einen Teil meines zweiten umzuformulieren? :p SCNR



  • Upps..
    Dein erster Satz hat kein Komma, es ist öde in eine Landschaft ohne Satzzeichen zu blicken.. Ich musste ihn 3 mal lesen, um ihn zu verstehen 😞



  • Huch, welcher Satz? Der meines zweiten Absatzes? Aber da ist doch ein und, das trennt Teil 1 von Teil 2. 😕



  • So ich habe nun eine Antwort bekommen, die ich hier mal poste:

    Jürgen Wolf schrieb:

    Sehr geehrter Herr Schröder,

    Es tut mir natürlich sehr leid, dass sie mit dem Buch nicht zufrieden sind.

    Jeder Autor hat seine Art und Weise etwas zu erklären. Man überlegt sich, wie erkläre ich es am Besten ohne zuviel vorwegzunehmen. Die Zeiger wurden zu Beginn erklärt, um den Leser nicht gleich mit Klassen und Datenstruktur gleichzeitig zu bombardieren. Ebenso war es bei anderen Dingen im Kapitel 2 (wo sie am meisten Kritik geschrieben haben).

    Ein Problem dürfte wohl für viele Leser sein, dass ich im Buch die Dinge wie std::string und std:vector hinten im Buch beschreibe und so eben nicht immer vorgreifen zu müssen. Das dürfte wohl auch die Hauptkritik der meisten Leser sein. Würde ich hier gleich auf std::string oder std::vector zurückgreifen, hätte ich auch nicht soviel "C mit Klassen" (wie sie es bezeichnen) verwenden müssen.

    Ich habe diese Kritik natürlich auch zu Herzen genommen und bereits in meinem C++-Taschenbuch einfließen lassen. Auch die nächste Auflage des C++-Handbuches wird sicherlich komplett anders aussehen. Viele nützlich Verbesserungen habe ich ja schon und außerdem kommt ja auch noch der neue C++-Standard dazu.

    Mit besten Grüße
    Jürgen Wolf



  • Genau, die Hauptkritik liegt in der Didaktik, nicht etwa in seinen Fehlern. Solchen Leuten kannst Du nichts erzählen. Überhaupt sollte Kritik nicht an Jürgen Wolf gehen, der Typ ist einfach viel zu engstirnig. Man sollte eher den Verlag dazu bewegen, von dem Verlag seiner Bücher wegzugehen. Aber die kümmert es wohl nicht, wenn falsche Informationen verkauft werden, solange sich's verkauft. -.-



  • Ja, da hast du wohl recht. Den Verlag kriegen wir sicher nicht überredet, dem gehts nur ums Geld.

    Dem Autor (eines Programmierbuches) hingegen meist aber nicht. Bleibt also nur zu hoffen, dass er sich unsere Kritik zu Herzen nimmt und eine neue, komplett veränderte Auflage herausgibt und die alte als unsicher und falsch deklariert.

    Da kann man nichts machen..



  • Frag ihn, ob er uns den Text auch in Deutsch geben kann.



  • Selbst die WinAPI ist nicht unbedingt ein Argument für C-Strings. Ein std::vector<char> kann auch hier häufig als sicherere Alternative gewählt werden.


Anmelden zum Antworten