Probleme beim Kopieren eines Arrays



  • Was ist das Problem, die Leute nicht anzulügen? Schreibt doch einfach "printf ist nicht zu empfehlen" statt "printf ist kein C++".


  • Mod

    Xin schrieb:

    Typsicherheit ist so eine Sache... die Formatstrings haben den Nachteil, dass sie ausgeben, was man im Formatstring festgelegt hat, auch wenn man einen anderen Typ reinwirft. Aber damit haben die Formatstring auch den Vorteil, dass sie ausgeben, was man im Formatstring festgelegt hat, auch wenn man einen anderen Typ reinwirft.

    Das ist kein Vorteil. Du kannst das gleiche mit einem einfachen Cast typsicher erreichen. Hingegen sind gefühlte 50% der Fragen im C-Forum wegen falscher Formatspezifizierer.

    Ebenfalls bearbeite ich Dateien bevorzugt mit fread und fwrite und fprintf. (Nicht scanf).
    Und jetzt? Schlechter C++-Programmierer oder jemand, der sich die Möglichkeiten aus C++ so rausfischt, wie er sie braucht?

    Was soll denn der Vorteil von fread und fwrite sein, die doch wirklich genau das gleiche machen wie bei den Streams? Dafür hast du den Nachteil, dich um die Datei selber kümmern zu müssen und du musst je nach Datenquelle eine andere Funktion wählen.



  • Xin schrieb:

    Wenn Dein Spezi auf dem Speicher kein Placement New aufruft, dann ist das aber kein calloc()-Problem.

    der punkt ist doch der, man macht in der regel kein *alloc() in c++. es gibt sehr selten einen grund dafür. new[[]] existiert und deckt die allermeisten fälle ab. wenn man davon abweichen muss, muss es schon sehr speziell zugehen.
    das gilt meines erachtens für alles, was in c geht und nun ein äquivalent in c++ hat. und das einem newbie schnellstens beizubringen ist in meinen augen wichtig. so bringt man ihn schnell mit den grundlegenden prinzipien in kontakt.



  • SeppJ schrieb:

    Das ist kein Vorteil. Du kannst das gleiche mit einem einfachen Cast typsicher erreichen. Hingegen sind gefühlte 50% der Fragen im C-Forum wegen falscher Formatspezifizierer.

    Ein Cast ist die Aufhebung der Typsicherheit. Dass man es dranschreibt ist sicherlich ein Vorteil, aber ein Cast bedeutet nicht, dass irgendwas typsicher wäre, sondern das Gegenteil.

    Gerade beim Debuggen, will man aber auch nur mal eben schnell... und da regen mich schon die Formatstring-Errors moderner Compiler auf...

    SeppJ schrieb:

    Ebenfalls bearbeite ich Dateien bevorzugt mit fread und fwrite und fprintf. (Nicht scanf).
    Und jetzt? Schlechter C++-Programmierer oder jemand, der sich die Möglichkeiten aus C++ so rausfischt, wie er sie braucht?

    Was soll denn der Vorteil von fread und fwrite sein, die doch wirklich genau das gleiche machen wie bei den Streams? Dafür hast du den Nachteil, dich um die Datei selber kümmern zu müssen und du musst je nach Datenquelle eine andere Funktion wählen.

    Ich finde die stdio hier deutlich handlicher. 🙂

    gewinner schrieb:

    Xin schrieb:

    Wenn Dein Spezi auf dem Speicher kein Placement New aufruft, dann ist das aber kein calloc()-Problem.

    der punkt ist doch der, man macht in der regel kein *alloc() in c++. es gibt sehr selten einen grund dafür. new[[]] existiert und deckt die allermeisten fälle ab. wenn man davon abweichen muss, muss es schon sehr speziell zugehen.
    das gilt meines erachtens für alles, was in c geht und nun ein äquivalent in c++ hat. und das einem newbie schnellstens beizubringen ist in meinen augen wichtig. so bringt man ihn schnell mit den grundlegenden prinzipien in kontakt.

    Das Recht der Gewohnheit ("in der Regel") sehe ich genauso, ein "grundlegendes Prinzip" sehe ich darin nicht.

    Bring einem Newbie bei, was falsch ist und warum etwas falsch ist. Aber "das ist kein C++" ist a) falsch und b) unbegründet. Es entsteht ein Gebot und aus Geboten entstehen Gläubige und Programmierung ist keine Religion - auch wenn's in manchen Threads so aussieht.

    Das ein Pattern, dass in der Regel auf eine gewisse Art formuliert wird (mit new) auch mit new formuliert werden sollte, damit es eben ein Pattern wird, dass jeder sofort lesen und auch ohne es wirklich zu lesen verstehen kann, ist eine Begründung.

    Ein printf() sollte man aber auch als C++-Programmierer lesen können.



  • Ich finde auch als Programmierer sollte man versuchen sich exakt auszudrücken. Weil ich der Meinung bin dass das wichtig ist, Misverständnisse vermeidet etc.

    Ich weiss dass ich da selbst recht oft ... diesbezüglich verbesserungswürdige Texte schreibe, aber OK, darum geht's (mir) jetzt nicht. Jeder macht Fehler.

    Was ich nicht mehr OK finde, ist sowas zum Prinzip zu erheben. Und das auch noch ohne guten Grund.

    Ich habe hier noch kein einziges Argument gelesen warum es als (falsche) faktische Aussage formuliert sein muss. Einige von euch haben den Teil einfach ganz ignoriert, und dort wo darauf eingegangen wurde was es nach dem Motto "na und, reg dich halt nicht auf, is ja egal". Aber kein einziges Argument dafür.

    Argument dagegen (falls ich es wirklich schreiben muss): falsch ist halt einfach falsch.



  • Gemäß der C++ Norm ist ::std::printf() nur dann C++, wenn die "<cstdio>" mit eingebunden wurde, nicht aber die "<stdio.h>" Ob Goldfish dies getan hat, wissen wir nicht. Da er aber schonmal C programmiert hat, davon also mehr Ahnung als von C++ hat, wird er höchstwahrscheinlich auch die "<stdio.h>" eingebunden haben.

    Trotz der Tatsache, daß ::std::printf() als Bestandteil der "<cstdio>" auf dem Papier Bestandteil der C++-Norm sein soll, heißt das noch lange nicht, daß das auch tatsächlich der Fall ist.

    Denn dann müßte ::std::printf() voll integriert sein in den kompletten Rest der C++-Norm, was aber nicht der Fall ist.

    Ein gutes Beispiel dafür ist folgender Code:

    template <typename T>
    void output(const T& pX)
    {
        std::cout << pX << std::endl;
    }
    

    Die Vertreter der "::std::printf() ist C++"-Fraktion können ja mal spaßeshalber versuchen, diesen Code mit ::std::printf() zu schreiben. Viel Glück.



  • adgafafafafafesafesa schrieb:

    Trotz der Tatsache, daß ::std::printf() als Bestandteil der "<cstdio>" auf dem Papier Bestandteil der C++-Norm sein soll, heißt das noch lange nicht, daß das auch tatsächlich der Fall ist.

    Das was du abschätzig Papier nennst, IST C++. Was kann denn darüber hinaus noch "tatsächlich der Fall" sein?


  • Mod

    adgafafafafafesafesa schrieb:

    Trotz der Tatsache, daß ::std::printf() als Bestandteil der "<cstdio>" auf dem Papier Bestandteil der C++-Norm sein soll, heißt das noch lange nicht, daß das auch tatsächlich der Fall ist.

    Denn dann müßte ::std::printf() voll integriert sein in den kompletten Rest der C++-Norm, was aber nicht der Fall ist.

    Offenbar sind "Bestandteil der C++-Norm" und "voll integriert in der C++-Norm" für dich verschiedene Dinge, sonst ist das bloss ein Zirkelschluss.
    Kannst du das erläutern?



  • camper schrieb:

    Offenbar sind "Bestandteil der C++-Norm" und "voll integriert in der C++-Norm" für dich verschiedene Dinge,

    Nur dann, wenn das, was auf dem Papier steht, in der Praxis nicht oder nur sehr schwer umsetzbar ist.



  • Also, nachdem ich jetzt noch mein 2. Thema hier hatte und zusätzlich noch jemand durch meinen Code verwirrt war udn dazu noch ein Thema eröffnete weip ich mittlerweile, was schief gelaufen ist. Dass der ,-Operator solche Auswirkungen hatte, war mir nicht bewusst. Ich hatte mir da auch nichts bei gedacht, da die Syntax bei C# funktioniert ^^ (ja ich weiß, dass man das nicht miteinander vergleichen sollte)
    Und so wie es aussieht, muss ich dummerweise, fast mein ganzes Programm umschreiben, das eigentlich schon funktioniert hatte, bis auf den einen Punkt, dass sich die Werte nicht mehr anpassen ließen... echt frustrierend sowas.
    Aber Grund ist eigentlich, dass ich in ca. einem Jahr wohl meine Diplomarbeit mit dem Zeug schreiben muss und entsprechend wollte ich jetzt schonmal Programme schreiben um mögliche böse Fehler wie den jetzt schon vorher zu entdecken.

    Danke an euch alle ^^


Anmelden zum Antworten