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