【发布时间】:2014-11-17 04:17:44
【问题描述】:
我有以下代码。我从http://www.gnu.org/software/libc/manual/html_node/crypt.html 拿的
#define _XOPEN_SOURCE
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <crypt.h>
int
main(void)
{
/* Hashed form of "GNU libc manual". */
const char *const pass = "$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/";
char *result;
int ok;
printf("%s\n",pass);
/* Read in the user’s password and encrypt it,
passing the expected password in as the salt. */
result = crypt(getpass("Password:"), pass);
printf("%s\n",result); /*I added this printf*/
/* Test the result. */
ok = strcmp (result, pass) == 0;
printf("valor de la comparacion: %i\n",ok);/*I added it*/
puts(ok ? "Access granted." : "Access denied.");
return ok ? 0 : 1;
}
当我输入 GNU libc 手册时,输出是“授予访问权限”。但是strcmp返回的值是1,这个值意味着result和pass不相等。但是输出是:
$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/
Password:
$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/
valor de la comparacion: 1
Access granted.
我对 strcmp 的行为感到非常困惑。
【问题讨论】:
-
我认为正在检查条件
strcmp (result, pass) == 0,因为这个条件为真,这就是它返回1的原因。尝试在printf中打印strcmp (result, pass)。 -
如果两个字符串具有相同的内容,我希望 strcmp (result, pass) == 0 返回一个非零数字。
-
@bvj 如果两个字符串的内容相同,它将返回 0。
-
@Himanshu "It" 是 strcmp,正确。那么就我而言,0==0 会如何评估?
-
@bvj
0==0表示条件为真(因为零等于零),所以它将返回1。