2014-06-09 4 views
-2

J'ai copié cette fonction depuis le web. Je ne comprends pas ce que c == 8 && pos signifie dans cette fonction et ch est un char comment peut-il être égal à 8. Je veux changer la longueur du mot de passe à 4 qui est maintenant 13. Quand j'ai essayé de le changer et de le compiler. Le programme a fonctionné avec succès mais il n'arrête pas de prendre le mot de passe et même en appuyant sur entrer il n'a pas arrêté de prendre le mot de passe d'entrée.Quel est le problème avec ma fonction (mot de passe)?

Je pense qu'il doit faire quelque chose avec c == 8 && pos dans la fonction suivante.

void password(char buffer[]) 
{ 
     char c; 
     int pos = 0; 
      printf("Enter Password : "); 
     do 
      { 
      c = getch(); 
       if(isprint(c)) 
       { 
        buffer[ pos++ ] = c; 
        printf("%c", '*'); 
       } 
       else if(c == 8 && pos) 
       { 
        buffer[ pos-- ] = '\0'; 
        printf("%s", "\b \b"); 
       } 
      }while(c != 8); 
} 
+0

Le 8 est un caractère de retour arrière ASCII, cette partie gère la suppression d'un caractère lorsque vous appuyez sur la touche de retour arrière. – PeterJ

+0

'13' est le code ASCII de la touche' Enter'. 'while (c! = 13);' cesserait d'avoir une entrée après avoir tapé 'Enter' –

+0

Merci beaucoup! –

Répondre

1

c == 8 vérifie si la valeur ASCII character est égale au caractère de retour arrière. Pos vérifie également si la position n'est pas zéro. c'est équivalent à "pos! = 0". Le code supprime les caractères de retour arrière du tampon. De plus, cette fonction peut être sujette à un dépassement de tampon. Puisque vous passez l'adresse du tampon, mais pas de taille maximale, que se passe-t-il lorsque l'utilisateur entre une chaîne plus longue que la mémoire allouée. Vous devez également transmettre la longueur du tampon en tant que paramètre et valider la position < de la longueur du tampon.

Questions connexes