原帖見: http://blog.163.com/xiaolei-li/blog/static/114404451200911172155783/
在軟體開發中,往往會遇到要求使用者輸入密碼的情況。出於對密碼的保密,輸入的字元是不會顯示到螢幕上的。例如,在登入linux系統時,輸入使用者名稱後,輸入的密碼是不顯示的。這裡介紹兩種方法來解決這一問題。
curses庫是由柏克萊大學的bill joy及ken arnold所開發的。當時開發curses庫的目的是為了解決程式對於不同終端的相容性。curses庫用於處理linux/unix上的游標移動及螢幕顯示問題。考慮到curses庫的複雜性,這裡只是簡單地介紹一下curses庫的使用。需要這方面詳細資訊可以查閱相關資料。
使用curses庫中的函式前,需要進行必要的初始化工作。程式需要使用initscr函式來開啟curses模式,在結束前呼叫endwin函式來關閉curses模式。**如下:
#include
int main(int argc,char* argv)while(c != '/n' && n < (size - 1));
passwd[n] = '/0';
return n;
int main()
char passwd[20];
int n;
init();
n=getpasswd(passwd, sizeof(passwd));
printw("/nyour passwd is:%s/n", passwd);
printw("press any key continue .../n");
refresh();
getchar();
endwin();
return 0;
使用gcc編譯該程式,獲得名為p6.5的可執行程式。注意程式中使用了curses庫,因此編譯時要指明該庫的名稱。具體編譯和執**況如下:
[program@localhost charter6]$ gcc -o p6.3 p6.3.c -lcurses
[program@localhost charter6]$ ./p6.3
please input password:*******
your passwd is:afdafds
press any key continue ...
還有種方法,可以不使用curses庫解決密碼輸入的回顯問題。程式p6.4.c通過使用tcgetattr函式和tcsetattr函式同樣達到了目的。具體**如下:
#include
#include
#include
#include
#define echoflags (echo | echoe | echok | echonl)
//函式set_disp_mode用於控制是否開啟輸入回顯功能
//如果option為0,則關閉回顯,為1則開啟回顯
int set_disp_mode(int fd,int option)
int err;
struct termios term;
if(tcgetattr(fd,&term)==-1)while(c != '/n' && c !='/r' && n < (size - 1));
passwd[n] = '/0';
return n;
int main()
char passwd[20];
//首先關閉輸出回顯,這樣輸入密碼時就不會顯示輸入的字元資訊
set_disp_mode(stdin_fileno,0);
//呼叫getpasswd函式獲得使用者輸入的密碼
getpasswd(passwd, sizeof(passwd));
printf("/nyour passwd is:%s/n", passwd);
printf("press any key continue .../n");
set_disp_mode(stdin_fileno,1);
getchar();
return 0;
使用gcc編譯p6.4.c**,獲得名為p6.4的可執行程式。執行該程式,得到如下的輸出結果:
[program@localhost charter6]$ gcc -o p6.4 p6.4.c
[program@localhost charter6]$ ./p6.4
please input password:
your passwd is:afdfasf
press any key continue ...
[program@localhost charter6]$
C 輸入密碼(字元)不回顯
1.中有乙個 getch 函式,當使用它的時候不會回顯字元。2.如下,r 表示回車符 b 表示退格符,當按下 backspace 時就是輸入了 b 退格的意思是游標往前一格,而原來位置顯示的字元不變,所以判斷若輸入非退格符則顯示 並且將ch讀入到password中 若為退格符,則需先顯示 b 使得游...
密碼不回顯函式(二)
值得注意的是前面兩個函式都是從鍵盤讀入資料!還有getchar是很值得研究的 getchar 是stdio.h中的庫函式,它的作用是從stdin流中讀入乙個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了。而getch 和getche 是conio.h中的庫函式,它的作用是從鍵盤接...
getpass 函式 螢幕輸入不回顯
環境 vmware workstation centos 6.4 x86 64 說明 讀寫使用者輸入,螢幕不回顯 char getpass const char prompt getpass用於從鍵盤讀取使用者輸入,但螢幕不回顯。引數prompt為螢幕提示字元。函式返回值為使用者鍵盤輸入的字串。螢幕...