Je suis conscient qu'il n'est pas possible d'echo le * pendant que vous tapez dans la norme ANSI C. mais y a-t-il un moyen de ne rien afficher pendant que quelqu'un frappe leur mot de passe dans la console. Ce que je veux dire, c'est comme si les invites Sudo dans un terminal UNIX / Linux. Comme si vous tapez la commande: sudo cp / etc / quelquefile ~ / somedir code>. Vous êtes généralement invité pour le mot de passe root. Et pendant que vous le tapez, le terminal affiche rien. Cet effet est-il possible dans c? Si c'est le cas, comment? P>
5 Réponses :
La fonction que vous recherchez est la suivante: getPass () . Vous noterez cependant que cela est marqué comme "héritage". Bien que cela ne va pas aller nulle part, la fonction ne permet pas de spécifier la taille du tampon d'entrée, ce qui ne fait pas une très bonne interface. Comme JEFROMI l'a noté, le manuel GLIBC fournit code d'exemple portable pour la mise en œuvre de GetAss à partir de zéro d'une manière qui permet une taille d'entrée arbitraire (et n'est pas legacy). P>
Ils devraient fournir un getnpass () code> donc tous les programmeurs doivent donc réinventer la roue ...
* Ce n'est pas un échantillon Ansi C (Merci Billy)
Vous pouvez détecter la clé de frappe avec _kbhit (), puis obtenir la valeur à l'aide de _getch ().
Les deux fonction n'échouent pas le contenu à l'écran. P>
Notez que ce n'est pas Ansi C.
Je ne pense pas que conio.h code> est susceptible d'être disponible si vous compilez sur UNIX ou Linux.
sudo est écrit en c, donc oui :). Le http://sudo.ws/repos/sudo /file/dc3bf870f91b/src/tgetPass.c#l70 p> getPass () code> fonction Safyan mentionné est probablement Ce que vous voulez, mais voici où l'outil de sudo est-il si vous êtes intéressé: p>
La méthode de la pauvre homme, c'est-à-dire de lire le caractère de saisie de l'utilisateur par caractère et, une fois que chaque caractère est reçu, imprimez un caractère de retour arrière suivi de * code>. La sortie est techniquement envoyée à la console, mais elle est immédiatement effacée et écrasée par un astérisque (souvent avant que ce cadre soit même dessiné à l'écran). Notez que ce n'est pas vraiment une méthode sécurisée et comporte plusieurs trous de sécurité, mais pour des applications de faible sécurité à basse technologie, cela fonctionne. P>
#include <stdio.h> #include <conio.h> void main() { char pwd[15]; int i; printf("Enter Password : "); for(i=0;i<15;i++) { pwd[i]=getch(); if(pwd[i]!='\r') { printf("*"); } if(pwd[i]==13) break; } printf("\n \nPassword is : "); for(i=0;i<15;i++) { printf("%d ",pwd[i]); } }
CONIO.H CODE> n'existe pas dans l'environnement Linux, voir Stackoverflow.com/questions/8792317/... . Vous pouvez en outre expliquer un peu plus sur votre solution?
Bienvenue sur Stackoverflow. S'il vous plaît expliquer votre réponse afin que les autres puissent comprendre plus facilement.
Pour ceux qui sont du code dans Windows Turboc / C ++, Visual Studio Editor ------------> Oui, comme si quelqu'un veut créer un projet mineur ou que l'un des débutants souhaite obtenir l'astérisque à la place de Array de caractère ou de chaîne en langage de programmation C / C ++. . De plus, l'étudiant en génie électrique peut également utiliser ce code pour l'astérisque sur le lieu d'entrée à l'écran et continuer.
Ce n'est pas possible de montrer ""? printf (" i>"); le fera.
@Peter K.: Je crois qu'il fait référence au fait que toutes les fonctions d'entrée standard écho à la console. Bien sûr, vous pouvez imprimer *, mais le caractère que l'utilisateur tapé est déjà là.
Dupliquer possible Stackoverflow.com/Questions/1196418/...
@Billy: Cela a du sens, merci!
TinyFileDielogs est un fichier unique C (plate-forme inter-plate-forme) proposant des dialogues de base graphique et de la console (y compris une boîte de passe et une boîte de mot de passe) sf.net/p/tinyfiledialogs