wer findet den fehler



  • hmhmhm schrieb:

    Aber wo ist denn nun der Fehler?
    Ich seh keinen.

    Es wird nicht auf das Stringende geprüft.



  • DirkB schrieb:

    Andromeda schrieb:

    DirkB schrieb:

    b) du kannst nicht nach '\0' suchen.

    Glaube ich nicht. Denn das "if (*p == c) return p;" kommt doch davor.

    Da findest du das aber nur bei einem Leerstring.

    Stimmt, sonst müsste ich p returnen.
    Ach, die ganze Funktion ist einfach doof. 😞



  • Warum hast du dich für das Preinkrement entschieden?



  • DirkB schrieb:

    Warum hast du dich für das Preinkrement entschieden?

    Es soll direkt nach dem Hochzählen auf 0 geprüft werden. Ansonsten wird noch ein Schleifendurchlauf gemacht.



  • Mit einem Postinkrement wären beide Probleme weg.



  • DirkB schrieb:

    Mit einem Postinkrement wären beide Probleme weg.

    Naja, eigentlich sucht man nicht nach 0 im String, weil eine 0 bedeutet, dass der String zuende ist. Jedenfalls in C.



  • Andromeda schrieb:

    DirkB schrieb:

    Mit einem Postinkrement wären beide Probleme weg.

    Naja, eigentlich sucht man nicht nach 0 im String, weil eine 0 bedeutet, dass der String zuende ist. Jedenfalls in C.

    Komisch, strcat macht erstmal genau das.
    Und ich bekomme gleich den Pointer darauf und muss nicht mehr rechnen.

    Mit dem Postinkrement behebst du auch das Problem, wenn du ein Zeichen in einem Leerstring suchst.
    (Das du mit dem Preinkrement hast)



  • DirkB schrieb:

    hmhmhm schrieb:

    Aber wo ist denn nun der Fehler?
    Ich seh keinen.

    Es wird nicht auf das Stringende geprüft.

    Oh mann...
    Da könnt ich mir doch glatt Vorwürfe machen.



  • DirkB schrieb:

    Andromeda schrieb:

    DirkB schrieb:

    Mit einem Postinkrement wären beide Probleme weg.

    Naja, eigentlich sucht man nicht nach 0 im String, weil eine 0 bedeutet, dass der String zuende ist. Jedenfalls in C.

    Komisch, strcat macht erstmal genau das.

    Es muss ja auch wissen wo der string aufhört.
    Die vorliegende Funktion kann dann z.B. 0 zurückgeben, was soviel heisst wie "nicht gefunden"



  • Andromeda schrieb:

    Die vorliegende Funktion kann dann z.B. 0 zurückgeben, was soviel heisst wie "nicht gefunden"

    👍



  • Naja, das ist Ansichtssache. Eine '\0' gehört zu jedem String.
    Man kann zwar memchr nehmen, aber warum nicht mit einer kleinen Änderung richtig machen?



  • DirkB schrieb:

    warum nicht mit einer kleinen Änderung richtig machen?

    Da hat er kein Interesse dran, siehst Du doch in anderen Threads ...



  • DirkB schrieb:

    Naja, das ist Ansichtssache. Eine '\0' gehört zu jedem String.
    Man kann zwar memchr nehmen, aber warum nicht mit einer kleinen Änderung richtig machen?

    Das "richtig machen" liegt im Auge des Betrachters. Der OP gab uns leider keine exakte Spezifikation, wie sich die Funktion verhalten soll. Das erklärt auch das Rumgeeiere hier.



  • Belli schrieb:

    DirkB schrieb:

    warum nicht mit einer kleinen Änderung richtig machen?

    Da hat er kein Interesse dran, siehst Du doch in anderen Threads ...

    Welche anderen Threads?



  • Andromeda schrieb:

    DirkB schrieb:

    Naja, das ist Ansichtssache. Eine '\0' gehört zu jedem String.
    Man kann zwar memchr nehmen, aber warum nicht mit einer kleinen Änderung richtig machen?

    Das "richtig machen" liegt im Auge des Betrachters. Der OP gab uns leider keine exakte Spezifikation, wie sich die Funktion verhalten soll. Das erklärt auch das Rumgeeiere hier.

    Spezifikation? Dachte, wenn es strchr und memchr gibt, sollte strnchr ein strchr sein, welches nach spätestens n abbricht. War aber nur mein Gedankengang. Die null hab ich jetzt nicht extra gesucht, aber meinen code angepasst, auch wenn er dadurch etwas langsamer wird. Vllt. braucht das ja mal jemand...



  • OK, zugegeben, ist unwahrscheinlich!! 🤡


Anmelden zum Antworten