注意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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值