Frage zu PW-Code (sizeof)



  • Morgen,

    mein viel zu wenig bis nichts wissen 🙂 und der blöde Code hat mich jetzt soweit getrieben das ich euch mal damit belästige.
    Ich steh grad voll auf dem Schlauch ich kann mir nicht erklären warum der Code von mir immer ein 9 Stelliges PW will warum nicht 1 Zeichen mehr oder weniger es läuft doch immer die gleich Überprüfung auf die Zeichen ab. Ich hab mir auch n schon so anzeigen lassen gibt mir bei einem mehr halt dann 11 aus müsste er doch dann au so machen ....

    /* Constanten */
    const char p[] = {"123xyz4567"};

    /* Funktionen */
    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; /*Falsches Passwort*/

    return 1; /*Richtiges Passwort */
    }

    Danke



  • moien,
    z.b. bei
    const char p[] = {"1"};
    ist sizeof(p) gleich 2. da ist nämlich noch ein byte von der 0 belegt.
    gruß,
    f.m.r.b.
    🙂



  • ja hmm schon aber das wird ja beim deklarieren schon angehängt also 9 +1 das gleiche beim einlesen (fgets) der hängt mir \0 ja auch mit an oder? sonst würde es ja so oder so nicht gehen. Mit einem 9 stelligen passwort gehts ja nur wenn ich die stellen änderen dann nett.



  • fgets hängt auch noch ein \n dran, wenn genug platz über ist. vllt. ist das dein prob.



  • frag mich ruhig, bruder schrieb:

    fgets hängt auch noch ein \n dran, wenn genug platz über ist. vllt. ist das dein prob.

    Kannste ja löschen:

    void remove_newline ( char* buf )
    {
    	char* p = strrchr(buf, '\n');
    	if (p)
    		*p = 0;
    }
    
    const char* PWD = "abc"; 
    
    typedef int bool;
    enum{false,true};
    
    bool check_passwort ( char* pwd )
    { 
    	char* p_pwd = PWD;
    	if ( pwd == NULL )
    		return false;
    	while ( *pwd )
    		if ( *pwd++ != *p_pwd++ )
    			return false;
    	return *p_pwd == 0;
    } 
    
    void remove_newline ( char* buf )
    {
    	char* p = strrchr(buf, '\n');
    	if (p)
    		*p = 0;
    }
    
    int main( void )
    {
    	char buf [BUFSIZ+1] = {0};
    	printf("Passwort eingeben: ");
    
    	fgets ( buf, sizeof(buf), stdin );
    	remove_newline (buf);
    
    	if ( true == check_passwort (buf) )
    		puts("Passwort ok.");
    	else
    		puts("Passwort nicht ok.");
    
    }
    

Anmelden zum Antworten