Frage zu strchr in c?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Nun, dann nimm am besten dieses Beispiel gleich mal zum Anlass, zu lernen, wie man Dokus zu Funktionen liest.

1. Schritt (falls du nicht schon eine Lieblingsdoku der üblichen Funktionen zur Hand hast): https://www.google.de/#q=c+strchr

2. Schritt: hierin die ersten paar Treffer mal anschauen, ob da was bei ist, was zur aktuellen Frage passt. Der erste Treffer hier ist bei mir im Moment: http://www.c-howto.de/tutorial-strings-zeichenketten-stringfunktionen-suchen-strchr.html

Die Info zur Funktion fängt hier wie üblich mit der "Deklaration" oder "Signatur" der Funktion an:

char * strchr(char *s, int c);

d. h. die Funktion nimmt als "Argumente" (das Zeug zwischen den Klammern hinter dem Funktionsnamen) einen Zeiger auf einen Character oder einen Array von Characters (das ist bei C intern dasselbe) ("char *") und eine Ganzzahl ("int").

Damit macht die Funktion was und spuckt wiederum einen Zeiger auf ein Character ("char *" - der Rückgabetyp steht vor dem Funktionsnamen) aus.

(Ist schon zu lang her, dass ich das bei C gelesen hab, bei C# ist der Unterschied zwischen Funktionsdeklaration und Funktionssignatur nur, dass bei der Deklaration noch Namen hinter den Argumenttypen stehen - oben steht danach die "Deklaration", die "Signatur" wäre

char * strchr(char *, int)

)

3. Schritt und folgende Schritte - wie ich dann weiter vorgehe, hängt bei mir von der Fragestellung ab - entweder schaue ich als nächstes, was die Funktion bedeutet, oder - falls mir das klar ist - schaue ich, welche Argumente ich brauche und in welcher Reihenfolge die hier drin stehen.

Nach der oben gefundenen Doku können wir mit dieser Funktion ein Zeichen in einem String (Array von Chars) suchen - also ziemlich genau das, was du nach deiner vorigen Frage https://www.gutefrage.net/frage/frage-zu-strings-in-c brauchst. (Wenn du einen kompletten Untertext in einem Text suchst, brauchst du eine andere Funktion.)

Der Satz "Das zu suchende Zeichen wird mit dem Parameter c als ASCII-Code übergeben." ist nur dann leicht zu verstehen, wenn man sich schon etwas mit Datentypen (bzw. dem Mangel an solchen) in C auskennt. Wichtig ist, dass der "Parameter" (hier gleichbedeutend mit das "Argument") die richtige Anzahl an Bit hat; er wird dann als Zeichen interpretiert.

Nach deiner vorigen Frage geht es darum, herauszufinden, ob das gesuchte Zeichen c überhaupt im String / Character-Array s vertreten ist. Nach der Doku liefert strchr genau dann NULL zurück, wenn c NICHT in s auftritt.

Damit kann man z. B. folgende Abfrage verwenden:

if ( strchr(s, c) == NULL ) { Block_NichtDrin } else { Block_Drin };

oder - kürzer und C-typischer

if ( strchr(s, c) ) { Block_Drin } else { Block_NichtDrin };

(beachte die unterschiedliche Reihenfolge - NULL gilt als false, jeder andere Pointer als true)

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Da hast du nicht ganz unrecht.

Wenn die Funktion das Zeichen findet gibt sie einen Zeiger(pointer) zurück, der auf die Adresse des Zeichen zeigt. Darum wird auch alles ab dieses Zeichen ausgeben wenn du den char Zeiger mit "%s" ausgibst. 

Findet die Funktion aber keine Erscheinung des gewünschten Buchstaben, gibt sie einen NULL Zeiger zurück. Diesen Rückgabewert kannst du dir in einer if-Anweisung zu nutze machen.