getpass()函数用来接收密码,无回显;
函数原型:
#include <unistd.h>
char *getpass(const char *prompt);
参数prompt时输入时的提示信息,返回 char *;
我自己使用时遇到这种问题:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(void)
{
char *pa;
pa=getpass("passwd:");
puts("pa:"pa);
char *pp = getpass("dasd:");
puts("pp:"pp);
puts("pa:"pa);
return 0;
}
结果:
passwd:
123
dasd:
asd
asd
我第一次输入123,第二次输入asd,可见,在第二次调用了passwd函数后,pa和pp指向的内容相同了.
我认为getpass()函数从输入中读取的字符是在某一固定的内存地址中存放,故而第二次调用后pa和pp都指向的是相同的地址,内容也是一样的.
然后我的解决方案:
使用完getpass()函数后立即用memcpy()来拷贝.
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(void)
{
char pa[20],pp[20];
memcpy(pa,getpass("passwd:"),20);
memcpy(pp,getpass("dasd:"),20);
puts(pa);
puts(pp);
return 0;
}