Schulprojekt - Groß zu Kleinbuchstaben



  • std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉



  • Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂



  • hmm ne keine Rekursion ^^ mag i net ... aber sonnst nice 🙂



  • KasF schrieb:

    Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂

    normal is '\0'==0, also tut sich das nix.



  • otze schrieb:

    KasF schrieb:

    Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂

    normal is '\0'==0, also tut sich das nix.

    Stimmt. Aber da ist die 0 kein Nullzeiger, sondern ne integrale Konstante.

    *string == '\0'
    

    Das Ding könnte einen Nullzeiger dereferenzieren und dann machts buum.

    strlen(0);  :warning:
    

    Jaja die alten guten char*'s 🙂



  • (D)Evil schrieb:

    hmm ne keine Rekursion ^^ mag i net ... aber sonnst nice 🙂

    Ich auch nicht 😃 ... ist doch auch langsamer als Iteration 😉 .



  • otze schrieb:

    ...normal is '\0'==0, also tut sich das nix.

    Oha, böser Flüchtigkeitsfehler !!
    Schau Dir nochmal den Code an unter der Frage "Was passiert, wenn die Funktion mit 0 aufgerufen wird ?":

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    "Nichts passieren" dürfte nicht im Pool möglicher Verhaltensweisen liegen. 😉

    Gruß,

    Simon2.


  • Mod

    Simon2 schrieb:

    Oha, böser Flüchtigkeitsfehler !!

    Schon mal gefragt, wie sich die Funktion strlen der Standardbibliothek mit NULL-Pointern verhält? Auf NULL zu prüfen impliziert, dass NULL ein gültiges Argument ist - und das ist eine Frage der Spezifikation.



  • Simon2 schrieb:

    otze schrieb:

    ...normal is '\0'==0, also tut sich das nix.

    Oha, böser Flüchtigkeitsfehler !!

    ich geh mich mal schämen 😮. Alter falter war das offensichtlich, Ich sollte nurnoch auf template fragen antworten 🙄



  • camper schrieb:

    Simon2 schrieb:

    Oha, böser Flüchtigkeitsfehler !!

    Schon mal gefragt, wie sich die Funktion strlen der Standardbibliothek mit NULL-Pointern verhält? Auf NULL zu prüfen impliziert, dass NULL ein gültiges Argument ist - und das ist eine Frage der Spezifikation.

    Ich meinte nicht, dass eine "fehlende" NULL-Prüfung ein Flüchtigkeitsfehler sei, sondern otzes Schluss, sie sei "implizit vorhanden" (da man ja auch '\0' prüft).
    Da hat er halt die Dereferenzierung übersehen (und da ich sehr sicher bin, dass er das eigentlich locker draufhat, bezeichnete ich das als "Flüchtigkeitsfehler").

    Zur "Existenz der NULL-Prüfung" selbst stehe ich genauso wie Du.

    Gruß,

    Simn2.


Anmelden zum Antworten