我知道在您輸入標準ANSI C時不可能回顯*。但是有沒有辦法在控制檯中輸入密碼時顯示任何內容。我的意思是像Unix/Linux終端中的sudo提示符。就像輸入以下命令一樣:sudo cp /etc/somefile ~/somedir
。通常會提示您輸入root密碼。當你輸入時,終端不顯示任何內容。這個效果在C中可能嗎?如果是,如何?在C中輸入密碼
在C中輸入密碼
回答
您正在查找的功能是:getpass()。但是,您會注意到它被標記爲「LEGACY」。雖然它不會去任何地方,但該函數不允許指定輸入緩衝區的大小,這使得它不是一個非常好的接口。 Jeutti指出,glibc手冊提供portable example code for implementing getpass from scratch允許任意輸入大小(而不是LEGACY)。
他們應該提供'getnpass()',所以不是每個程序員都需要重新發明輪子... – Calmarius 2013-12-03 12:57:02
*這不是ANSI C(感謝比利)樣品
可以檢測與_kbhit(按鍵),然後獲取的應用價值_getch()。 這兩個函數都不會在屏幕上回顯內容。
#include <conio.h> //For keyboard events
#include <stdio.h> //Include this or iostream
#include <locale>
int main()
{
bool bContinue = true;
char szBuffer[255] = {0};
unsigned int nbufIndex = 0;
while (bContinue)
{
if (_kbhit())
{
szBuffer[nbufIndex] = _getch();
if (szBuffer[nbufIndex] == 0xD)
{
bContinue = false;
}
else
{
++nbufIndex;
printf("*");
}
}
}
printf("\n%s\n", szBuffer);
return 0;
}
請注意,這不是ANSI C. – 2010-04-14 01:08:00
我不認爲'conio.h'可能可用,在UNIX或Linux上重新編譯。 – 2010-04-14 01:11:28
sudo是用C編寫的,所以是:)。該getpass()
功能Safyan mentioned可能是你想要的,但這裏的地方實際sudo的工具做它,如果你有興趣:
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
的,窮人的這樣做的方法是通過讀取用戶輸入的字符字符,並且在接收到每個字符後,打印出退格字符後跟*
。輸出在技術上被髮送到控制檯,但它會立即被刪除並被星號覆蓋(通常在該幀甚至被拖到屏幕上之前)。請注意,這不是一種真正安全的方法,並且存在一些安全漏洞,但對於低技術含量的低安全性應用程序而言,它很有用。
- 1. 在Arduino中輸入密碼?
- 2. 在密碼輸入光標移動C++ \
- 3. 在ReactJS中輸入掩碼密碼
- 4. 爲密鑰輸入密碼
- 5. C#的輸入框,從密碼
- 6. C++ shell命令提示輸入密碼
- 7. C命令行密碼輸入
- 8. System.IndexOutOfRangeException輸入塊密碼使用c#
- 9. Xamarin C#EditText輸入類型密碼
- 10. UIWebView,輸入密碼
- 11. 如何在C++中將密碼輸入到ssh中?
- 12. 無法在表單中輸入密碼
- 13. 在python中隱藏密碼輸入
- 14. 在enter-pssession中自動輸入密碼
- 15. 在bash腳本中輸入MySQL密碼
- 16. 在ASP中輸入密碼登錄
- 17. 無法在Sql Plus中輸入密碼
- 18. SSH在Bluemix中要求輸入密碼
- 19. 在xhtml中禁用輸入密碼
- 20. 無法在Git Bash中輸入密碼
- 21. 防止下頜在密碼輸入字段中說「密碼」
- 22. 即使密碼在腳本中,SFTP提示輸入密碼
- 23. 在C++中檢測到輸入密鑰
- 24. crystal report在C#中要求輸入密碼?
- 25. 在Winform C中輸入參數和cmd.exe的密碼#
- 26. 如何讓用戶在c#中輸入3次密碼?
- 27. 奇怪的輸入文本和輸入密碼擦除默認輸入密碼
- 28. 輸入時隱藏輸入密碼(shell)
- 29. 陳舊的輸入被輸入密碼
- 30. 值輸入密碼字段輸入值
關於顯示「*」有什麼不可能?的printf( 「*」);會做的。 – 2010-04-14 00:54:53
@彼得K .:我相信他指的是所有標準輸入函數都會迴應到控制檯。當然,您可以打印*,但用戶輸入的字符已經存在。 – 2010-04-14 00:55:57
可能的重複http://stackoverflow.com/questions/1196418/getting-a-password-in-c-without-using-getpass-3 – 2010-04-14 01:00:42