Problem mit malloc und new



  • Der aus dem Westen ... schrieb:

    str[i] bedeutet, dass überprüft wird, ob in dem jeweiligen Element ein Nullterminierungszeichen steht. Wenn ja, wird die Schleife abgebrochen, und deshalb wird bei einem leeren String auch nur die 0 eingefügt. Die Anführungszeichen und den Schrägstrich spare ich mir, weil '\0' soweit ich weiß äquivalent zu 0 ist. Insofern würde ich (ohne weitere Kenntnisse darüber, wie hinterher der Maschinencode aussieht) sagen, dass die Schleife ihren Zweck sehr performant erfüllt, oder?

    Nicht performanter also mit dem Vergleich gegen den Nullterminator.
    Du läufst, solange str[i] wahr ist.
    Ich laufe, solange str[i] nicht der Nullterminator ist.



  • volkard schrieb:

    Nicht performanter also mit dem Vergleich gegen den Nullterminator.
    Du läufst, solange str[i] wahr ist.
    Ich laufe, solange str[i] nicht der Nullterminator ist.

    Und sofern mich meine kümmerlichen C/C++-Kenntnisse nicht trügen, ist wahr == (!Nullterminator) , oder? Der Nullterminator enthält ja den Wert 0, und der ist negativ, während jedes andere Zeichen positiv ist (zumindest, sofern mich mein Wissen um ASCII, den verschiedenen Codepages und den Unicode-Formaten nicht auf das Glatteis führen). Daher verstehe ich nicht ganz, was du mir sagen willst ...



  • Der aus dem Westen ... schrieb:

    volkard schrieb:

    Nicht performanter also mit dem Vergleich gegen den Nullterminator.
    Du läufst, solange str[i] wahr ist.
    Ich laufe, solange str[i] nicht der Nullterminator ist.

    Und sofern mich meine kümmerlichen C/C++-Kenntnisse nicht trügen, ist wahr == (!Nullterminator) , oder? Der Nullterminator enthält ja den Wert 0, und der ist negativ, während jedes andere Zeichen positiv ist (zumindest, sofern mich mein Wissen um ASCII, den verschiedenen Codepages und den Unicode-Formaten nicht auf das Glatteis führen). Daher verstehe ich nicht ganz, was du mir sagen willst ...

    Ich finde, daß meine Schreibweise eher Klartext ist, während Deine ein kleines Rätsel beinhaltet. Rätsel im Code sind böse meist. Es geht nicht darum, zu zeigen, daß man so vertraut mit C++ ist, daß man sowas normalerweise recht flüssig hinschreiben kann (das können wir alle). Es geht darum, daß man den Code auch noch stockbesoffen recht flüssig lesen kann.



  • Was mich immer noch wundert ist, dass es auf 3 Seiten keiner geschafft hat, die Initialisierungsliste ins Spiel zu bringen?

    class BOBString 
        { 
        public: 
            BOBString(const char *str); 
            ~BOBString(void); 
    
        private: 
            int len; // die Reihenfolge hab ich umgedreht,
            char *str; // sonst serviert einem der Compiler eine Warnung
        };
    
    BOBString::BOBString(const char* str) : len(std::strlen(str)), str(new char[len + 1])
    {
      // String kopieren
      // ...
    }
    

    Wo ich mir jetzt nicht sicher bin, ob strlen() für Null-Zeiger so funktioniert, dass 0 zurückgegeben wird, aber da kann man ja schnell mit ?: Abhilfe schaffen. 🤡



  • bmario schrieb:

    Wo ich mir jetzt nicht sicher bin, ob strlen() für Null-Zeiger so funktioniert, dass 0 zurückgegeben wird, aber da kann man ja schnell mit ?: Abhilfe schaffen. 🤡

    Wozu? Wer 0 übergibt, ist selber schuld. Fertig.


Anmelden zum Antworten