linux下利用C实现输入密码返回*的功能
C++也兼容这个功能
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
int getch(void);
char psw[20];//初始化密码为空"";
int length=0; //初始化密码长度
void inputPassword()//用于输入并回显*为密码
{
char temp_c;
printf("password:");
while(1)
{
temp_c=getch(); //输入一个字符
if(temp_c!='\n') //判断该字符是不为回车,如果是则退出while
{
switch (temp_c)
{
case 127:
if(length!=0)
{
printf("\b \b");
length--;
}
else;
break;
default:
printf("*"); //可用用你喜欢的任意字符,如改为puts"";则无回显
psw[length] = temp_c;//连成字符串;
length++;
break;
}
}
else break;
}
psw[length] = '\0';
}
char* getpassword()//返回一个密码字符串。
{
return psw;
}
int getch(void)
{
int c=0;
struct termios org_opts, new_opts;
int res=0;
//----- store old settings -----------
res=tcgetattr(STDIN_FILENO, &org_opts);
assert(res==0);
//---- set new terminal parms --------
memcpy(&new_opts, &org_opts, sizeof(new_opts));
new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
c=getchar();
//------ restore old settings ---------
res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
return c;
}
/*
int main(){
inputPassword();
printf(getpassword());
return 0;
}*/
把它作为头文件放到工程内部,直接函数调用即可。
PS:代码为二次加工。