Frage zu C-Strings



  • Hallo...

    Zurzeit lerne ich C++ und habe da in Bezug auf die C-Strings eine Frage.
    Bisher geht das ganze eingedlich ohne Probleme, jedoch beim Übungsversuch mit der Funktion strchr habe ich ein Verständnis Problem bei einem Beispielcode.

    http://www.cplusplus.com/reference/clibrary/cstring/strchr/

    Ich verstehe schon was die Funktion macht und wie man sie anwendet, jedoch in dem Beispielcode welchen man bei cplusplus.com findet (obiger Link) verstehe ich folgendes nicht:

    pch-str+1
    

    Somit findet er den Indexwert heraus, aber wieso pch-str?

    Ist das so das der grösseren Adresse (pch) die kleinere (str) abgezogen wird?

    Ich wäre sehr dankbar wen mir das jemand erklären könnte!

    Gruss,
    arb3r



  • strchr() liefert einen Zeiger in den String, der durchsucht wird. Um das in einen Index umzurechnen, zieht man von diesem Wert den Anfangspunkt des Strings ab (pch-str). Das anschließende "+1" dient wohl zur Umrechnung vom C-typisch nullbasierten Index auf die für manche Menschen verständlicheren eins-basierte Positionsangabe.

    (PS: falsches Board - aber da gibt's zum Glück Hilfsmittel dagegen :D)



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • CStoll schrieb:

    strchr() liefert einen Zeiger in den String, der durchsucht wird. Um das in einen Index umzurechnen, zieht man von diesem Wert den Anfangspunkt des Strings ab (pch-str). Das anschließende "+1" dient wohl zur Umrechnung vom C-typisch nullbasierten Index auf die für manche Menschen verständlicheren eins-basierte Positionsangabe.

    (PS: falsches Board - aber da gibt's zum Glück Hilfsmittel dagegen :D)

    Erstmal danke fürs verschieben 🙂 sry!

    Bei weiteren Überlegungen habe ich mir das schon gedacht, aber wiso bekommt man dan den Indexwert? Wieso wird das dan nicht gleich nochmal als char interpretiert und lauft bis zum Terminierungsbit?

    Danke für deine Hilfe 😃 !



  • Das nennt sich Zeiger-Arithmetik - wenn du zwei Zeiger (in das selbe Array) subtrahierst, erhältst du deren Abstand.
    In dem Beispiel hast du die gefundene Position im Array (wie gesagt, strchr() gibt keinen Index zurück sondern einen Zeiger) und die Adresse des String-Anfangs (das Array str, implizit umgewandelt in einen Zeiger), die Differenz davon ist der Index des gefundenen Zeichens im Array.



  • Ah gut... ich denke jezt verstehe ich das! 😃

    Super, vielen Dank CStoll 👍


Anmelden zum Antworten