Passwort-Abfrage(String einlesen)
-
So richtig sinnvoll wird das erst, wenn man sizeof(char) durch sizeof(p[0]) ersetzt. Dann ergibt das nämlich auch dann die Anzahl der Elemente, wenn man den Datentyp des Arrays von char auf irgendeinen anderen, zB int ändern würde.
-
GhostfaceChilla schrieb:
/* string8.c */ #include <stdio.h> #include <stdlib.h> const char p[]= { "123xyz456" }; int check_passwort(char passw[]) { int i, n = sizeof(p) / sizeof(char); for(i=0; i < n; i++) if(passw[i] != p[i]) return 0; return 1; } int main(void) { char Name[20], passwort[10]; printf("Login-Name : "); fgets(Name, 20, stdin); printf("Passwort : "); fgets(passwort, 10, stdin); if(check_passwort(passwort) == 1) printf("Willkommen im System %s\n", Name); else printf("Falsches Passwort! Systemzugriff verweigert.\n"); return EXIT_SUCCESS; }
Dort kapiere ich die Funktion check_passwort nicht ganz, zumindest folgende Zeile ist mir schleierhaft:
int i, n = sizeof(p) / sizeof(char);
Was geht hier vor?
Die n Berechnung wird falsch, sobald man p von const char[] in const char* definiert, außerdem ist hier
const char p[]= { "123xyz456" };
ebenso Unfug (hier aber ausnahmsweise ohne fehlerhafte Auswirkungen), richtig ist
const char p[]= "123xyz456";
Statt des Unfugs ist das dem Autor wohl unbekannte #include <string.h> besser:
int check_passwort(const char *passw) { return !strcmp(p,passw); }
-
Ok, dabke schonmal aber ich kapier des mit dieser Rechnung noch immer nicht ??
int i, n = sizeof(p) / sizeof(char);
So also sizeof(p) bezieht sich ja auf das:
const char p[]= { "123xyz456"};
Aber auf was bezieht sich sizeof(char)??
Danke nochmals
-
Auf den Datentyp char.
sizeof(char) -> meist 1
sizeof(int) -> meist 4
sizeof(short) > meist 2usw.
-
Ok, aber ich meine wo im Quellcode bezieht sich sizeof(char) drauf^^
Und was bringt mir das Ergebnis ....
-
Belli schrieb:
Auf den Datentyp char.
sizeof(char) -> meist 1Per Definition immer 1.
-
Was meinst du mit 1??^^
-
1 Byte.
Und was bringt mir das Ergebnis ....
Hat dir Belli in der ersten Antwort schön erklärt.
-
Also würde es dann so sein, das sizeof(p)= 9 und sizeof(char) = 1 ?
Wäre aber unnötig durch 1 zu teilen oder?^^
-
In diesem konkreten Fall, ja!
Wie in meiner ersten Antwort erklärt, sollte da auch eher sizeof(p[0]) statt sizeof(char) stehen, damit wird das Ganze ein wenig flexibler.
Solange Du aber weißt, daß p ein Array vom Typ char ist, ist sizeof(p) identisch mit der Anzahl der in p gespeicherten char's.