2013-05-08 25 views
1

我正在編寫一些獲取和存儲用戶密碼的函數。這一切都工作正常,但有什麼方法可以用星號替換提示中鍵入的內容嗎?例如?在命令行程序中模糊用戶輸入

這是窗口化應用程序中相當標準的行爲我已經通過C庫有一個很好的看法,但所有的fgets/getc類型函數似乎沒有提供任何控制。

編輯:試圖用ANSI C要做到這一點,下面OS X上運行的答案都指向我朝着正確的方向 - 我的搜索不轉了幾個環節的...

+3

DUplicate:http://stackoverflow.com/questions/6856635/hide-password-input-on-terminal – 2013-05-08 18:53:05

+0

這取決於你正在寫什麼,以及你如何寫它。如果您只是捕獲用戶輸入,然後再將其打印出來,則可以通過替換字符來處理。 – 2013-05-08 18:53:09

+0

檢查你的libc是否知道'getpass'函數。 – 2013-05-08 18:53:54

回答

1

你沒有說哪個平臺或編譯器,但看到ANSI C No-echo keyboard input。也許getch()或kbhit()或getpass(),取決於環境。

+0

沒有看到,當我搜索,謝謝! – drjimmie1976 2013-05-08 18:59:13

3

當然,使用某種終端控制庫來禁用字符回顯,然後打印任何你喜歡的內容。可能性:

+0

謝謝卡爾。我現在在教自己C困難的方式 - 如果不使用外部庫(即C和「常見的可疑」庫,如stdlib,stdio和string?),這可能會是可能的嗎?如果這將是一個巨大的努力,那麼這可能是方式超過我的水平,但對 – drjimmie1976 2013-05-08 18:54:37

+0

@ GasMan14感興趣1.「通常的嫌疑犯」被稱爲C標準庫,2.請參閱我的答案 - 在POSIX系統上(學習C時應該使用*)termios API是標準的,可以 – 2013-05-08 18:55:51

4

假設POSIX:

struct termios t; 
tcgetattr(STDIN_FILENO, &t); 
t.c_lflag &= ~ECHO; 
tcsetattr(STDIN_FILENO, TCSAFLUSH, &t); 

然後沒有用戶輸入將被呼應。如果您想撤消此設置,請將ECHO標誌撤回。

相關問題