selbstgeschriebenes strcat funktioniert nicht



  • Wenn es eine strcat Implementation sein soll, dann ist Speicherreservierung aber vollkommen unnötig. Zumal der Rückgabewert der erste Parameter, also das Ziel, ist. Die korrekte Signatur sieht übrigens wie folgt aus:

    char * strcat(char * restrict s1, const char * restrict s2);
    

    Und für Grössenangaben von Speicher verwendet man auch nicht int, sondern size_t bzw. ptrdiff_t. Und zweimal die Grösse mit strlen zu ermitteln, sieht Herr Schlemiel gleich doppelt ungern.
    Eine der einfachsten Implementierungen von strcat ohne Abhängigkeiten sieht ungefähr so aus:

    char * strcat(char * restrict s1, const char * restrict s2)
    {
        size_t i = 0;
        char * s = s1;
        while (*s != '\0')
            ++s;
        while ((s[i] = s2[i]) != '\0')
            ++i;
        return s1;
    }
    

    Allerdings sollte man sowas wirklich nur für Lernzwecke nutzen. Der Compiler realisiert solche Funktionen normalerweise intrinsic, was einfach effektiver ist.



  • groovemaster schrieb:

    Allerdings sollte man sowas wirklich nur für Lernzwecke nutzen. Der Compiler realisiert solche Funktionen normalerweise intrinsic, was einfach effektiver ist.

    Du meinst sicher effizienter!
    Effektiv kann man nicht steigern.

    Entweder etwas ist effektiv (erfüllt das Ziel) oder es ist nicht effektiv.

    Hier noch ein Link: http://www.spiegel.de/kultur/zwiebelfisch/0,1518,311601,00.html



  • groovemaster schrieb:

    ...Grösse mit strlen zu ermitteln, sieht Herr Schlemiel gleich doppelt ungern.

    Und wer ist der Herr Schlemiel eigentlich? 😃



  • Schlemiel? schrieb:

    Und wer ist der Herr Schlemiel eigentlich?

    das ist 'jiddisch' und heisst eigentlich 'Schlemiehl'. bedeutet soviel wie 'pechvogel'
    🙂



  • Schlemiel? schrieb:

    Und wer ist der Herr Schlemiel eigentlich? 😃

    Mehr dazu hier.

    @Javaner
    Ist dir langweilig? Du solltest deinen verlinkten Beitrag vielleicht noch mal genau lesen. Wenn ich mal zitieren darf:

    Effektiv bedeutet wirkungsvoll im Verhältnis zu den aufgewendeten Mitteln

    Ohne den Aufwand einer Implementierung, bekommst du vom Compiler hier ein mindestens gleich gutes, wenn nicht sogar besseres, Ergebnis. Wenn das mal nicht effektiver ist. 😉
    Aber wenn es dich stört, dann denk dir ein "effizient". Das ist bezogen auf die intrinsic Implementierung des Compilers auch nicht falsch.



  • groovemaster schrieb:

    Effektiv bedeutet wirkungsvoll im Verhältnis zu den aufgewendeten Mitteln

    Nettes Zitat, jedoch leider Falsch!

    Effektiv bedeutet einfach nur, daß etwas einen Effekt hat.

    Obwohl Wikipedia (respektive die Wikipedia-Autoren) da auch anderer Meinung sind.



  • Ohh! Stimmt doch das Zitat

    Allerdings widerlegt es meine Argumentation nicht.

    (Sorry, für das zuerst fehlerhafte Posting; aber ich bin gerade im Sauf-Modus 🙂 )



  • </pedantic>



  • Stimmt! 🙂

    </pedantic>
    

    ist korrektes HTML (was ne Ableitung von XML ist/war)

    😃



  • Javaner schrieb:

    Stimmt! 🙂

    </pedantic>
    

    ist korrektes HTML (was ne Ableitung von XML ist/war)

    😃

    wenn wir schon nur noch am rumspammen sind...
    XML kam erst _nach_ HTML auf. Beide basieren aber auf SGML.



  • Okay, hast Recht.

    hab's grad ergoogelt....



  • Javaner schrieb:

    Ohh! Stimmt doch das Zitat

    Allerdings widerlegt es meine Argumentation nicht.

    Doch. Ende der Geschichte.


Anmelden zum Antworten