我正在尝试getpass()
,我想我会尝试一下:
char *key1 = getpass("K: ");
char *key2 = getpass("K: ");
if(key1 == key2) {
printf("Good\n");
} else {
printf("Bad\n");
}
如果我在两个不同的领域写两个不同的东西,它会说“好”。我添加了一行来打印两个字符串,结果证明它们都等于我在第二个字符串中键入的内容(键入“1”和键入1的“2”,键2将导致两者等于2)。可能会发生什么?
答案 0 :(得分:2)
在Linux手册页中,getpass()
返回一个指向静态缓冲区的指针,因此每次调用get都将返回相同的地址,存储在key1
中的指针将始终等于存储在指针中的指针key2
。
返回值
函数
getpass()
返回一个指向静态缓冲区的指针,该缓冲区包含(没有尾随换行符的密码的第一个PASS_MAX字节),以空字节('\ 0')结束。可以通过以下调用覆盖此缓冲区。发生错误时,将恢复终端状态,正确设置errno
,并返回NULL。
您需要为getpass()
返回的每个字符串制作本地副本,然后使用(strcmp(key1Copy, key2Copy) == 0)
查看它们是否相等。
答案 1 :(得分:0)