天天看點

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

結果:

passwd:

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[],pp[];
    memcpy(pa,getpass("passwd:"),);
    memcpy(pp,getpass("dasd:"),);
    puts(pa);
    puts(pp);
    return ;
}