注意getpass()函数

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;
}

你可能感兴趣的:(注意getpass()函数)