strlen mit Pointern
-
Ich hab "strlen" mit Pointern realisiert, aber die Ausgabe der Zahlen funktioniert noch nicht so wie ich mir das denke. Es wird immer die Zahl eins, als Ergebnis ausgegeben obwohl ich mehr Zeichen eingegeben habe:
#include <stdio.h> #define MAX 10 int strlen(char *s); int main(int argc, char* argv[]) { char Ergebnis; char *ptr; char eingabe[MAX]; gets(eingabe); Ergebnis = strlen(eingabe); printf("%d\n", Ergebnis); return 0; } /* Wird ein Vektorname an eine Funktion übergeben, so wird in Wirklichkeit die Adresse des Anfangselements übergeben. Innerhalb der aufgerufenen Funktion ist dieses Argument eine lokale Variable und folglich ist ein Vektorname als Parameter ein Zeiger, dass heißt, eine Variable, die eine Adresse enthält. Damit können wir eine andere Version des "strlen" schreiben, die die Länge einer Zeichenkette berechnet */ int strlen (char *s) { int n; /* Da "s" eine Zeigervariable ist, darf man "s" natürlich inkrementieren. s++ hat keinen Einfluß auf die Zeichenkette in der Funktion, von der strlen augerufen wurde, sondern inkrementiert nur die lokale Kopie des Zeigers innerhalb von "strlen". */ for (n = 0; *s != '\0'; s++); n++; return n; }
-
cHillb3rT schrieb:
for (n = 0; *s != '\0'; s++); n++;
Überleg mal scharf, bis wohin der Schleifenkörper geht, wenn du keine geschweiften Klammern benutzt.
-
ah sry ich hab die Klammern vergessen..
Jetzt gehts auch. Ich hasse diese dummen Leichtsinssfehler:
int strlen (char *s) { int n; /* Da "s" eine Zeigervariable ist, darf man "s" natürlich inkrementieren. s++ hat keinen Einfluß auf die Zeichenkette in der Funktion, von der strlen augerufen wurde, sondern inkrementiert nur die lokale Kopie des Zeigers innerhalb von "strlen". */ for (n = 0; *s != '\0'; s++) { n++; } return n; }
-
cHillb3rT schrieb:
ah sry ich hab die Klammern vergessen..
Es geht auch ohne Klammern. Das Semikolon am Ende war zuviel.
-
MFK schrieb:
cHillb3rT schrieb:
ah sry ich hab die Klammern vergessen..
Es geht auch ohne Klammern. Das Semikolon am Ende war zuviel.
Das unter anderem auch, das hab ich nur schnell weg gemacht !
-
oder so wenn man den stack fluten will
int strlen(char *s){return *s?1+strlen(++s):0;}