J'utilise Linux et il y a une fonction personnalisée qui retourne un ASCII int
de type clé en cours comme getch()
. Lorsque vous essayez de vous y habituer et comment stocker le mot de passe que je suis entré dans une question, mon code est le suivant:Strcat jette une erreur de segmentation sur une simple entrée de mot de passe ressemblant à un getch
int main() {
int c;
char pass[20] = "";
printf("Enter password: ");
while(c != (int)'\n') {
c = mygetch();
strcat(pass, (char)c);
printf("*");
}
printf("\nPass: %s\n", pass);
return 0;
}
Malheureusement je reçois l'avertissement de GCC:
pass.c:26: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast
/usr/include/string.h:136: note: expected ‘const char * __restrict__’ but argument is of type ‘char’
J'ai essayé d'utiliser pointeurs au lieu d'un tableau de caractères pour passer, mais la seconde, je tape une lettre segfaults. La fonction fonctionne seule mais pas dans la boucle, au moins contrairement à getch() sur un système Windows.
Que voyez-vous qui ne va pas avec mon exemple? J'apprécie apprendre ceci.
EDIT: Merci aux réponses que je suis venu avec le code suivant: stupide
int c;
int i = 0;
char pass[PASS_SIZE] = "";
printf("Enter password: ");
while(c != LINEFEED && strlen(pass) != (PASS_SIZE - 1)) {
c = mygetch();
if(c == BACKSPACE) {
//ensure cannot backspace past prompt
if(i != 0) {
//simulate backspace by replacing with space
printf("\b \b");
//get rid of last character
pass[i-1] = 0; i--;
}
} else {
//passed a character
pass[i] = (char)c; i++;
printf("*");
}
}
pass[i] = '\0';
printf("\nPass: %s\n", pass);
+1 pour "J'apprécie apprendre ceci." –