c - getpass() 设置两个字符串相同?

标签 c

我正在尝试 getpass(),我想我应该尝试一下:

char *key1 = getpass("K: ");
char *key2 = getpass("K: ");
if(key1 == key2) {

    printf("Good\n");

} else {

    printf("Bad\n");

}

如果我在两个不同的领域写两个不同的东西,它会说“好”。我添加了一行来打印这两个字符串,结果发现它们都等于我在第二个字符串中键入的任何内容(为 key1 和 key2 键入“1”和“2”将导致两者都等于 2)。这里会发生什么?

最佳答案

在 Linux 手册页中,getpass() 返回一个指向静态缓冲区的指针,因此每次调用 get pass 都会返回相同的地址和存储在 key1 中的指针> 将始终等于存储在 key2 中的指针。

Return Value

The function getpass() returns a pointer to a static buffer containing (the first PASS_MAX bytes of) the password without the trailing newline, terminated by a null byte ('\0'). This buffer may be overwritten by a following call. On error, the terminal state is restored, errno is set appropriately, and NULL is returned.

您需要为 getpass() 返回的每个字符串制作一个本地副本,然后可以使用 (strcmp(key1Copy, key2Copy) == 0) 查看是否他们是平等的。

关于c - getpass() 设置两个字符串相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921729/

相关文章:

c - 编写一个测量缓存 block 大小的 C 程序

c++ - 使用 GNU C/C++ 编译器在 Eclipse 中找不到库文件

c - 如何在C中的递归函数中连接整数和字符串

c - For循环-多次C

c - 在 C 中两次具有相同标记的宏定义是什么意思?

c++ - 汇编如何做参数传递: by value,引用,不同类型/数组的指针?

c - 最大线程数

c - 如何使 switch 语句正确循环?

c - 在 C 中保留一个用于成员资格测试的大列表

C 将十进制 scanf 输入转换为二进制数组