gpt4 book ai didi

与 strcmp 比较加密字符串

转载 作者:行者123 更新时间:2023-12-02 05:55:52 24 4
gpt4 key购买 nike

我正在努力填补计算机科学方面的自学空白,并参加 Edx 上的 CS50 类(class)。我对 C 完全陌生。在其中一个问题集中,我必须比较使用 crypt 函数加密的字符串。

在下面的示例中,我无法理解为什么 strcmp 返回 0(即“声明”字符串相等:

#include <crypt.h>
#include <stdio.h>
#include <string.h>

#define _XOPEN_SOURCE

int main(void)
{
char string1[4] = "foo\0";
char string2[4] = "bar\0";

printf("crypt1: %s\n",crypt(string1, "50\0"));
printf("crypt2: %s\n",crypt(string2, "50\0"));

if (strcmp(crypt(string1, "50\0"),crypt(string2, "50\0")) == 0)
{
printf("crypt1: %s\n",crypt(string1, "50\0"));
printf("crypt2: %s\n",crypt(string2, "50\0"));
return 0;
}
}

当我运行程序时,输出值为:

crypt1: 50GbL/FUeE/J6
crypt2: 50hmnpE.bRNiU
crypt1: 50GbL/FUeE/J6
crypt2: 50hmnpE.bRNiU

if条件内的代码怎么可能被执行?

最佳答案

显然,crypt() 在每次调用时使用相同的缓冲区来存储加密字符串:

char string1[] = "foo";
char string2[] = "bar";

char *crypt1 = crypt(string1, "50");
printf("crypt1: %s\n", crypt1); // crypt1: 50GbL/FUeE/J6

char *crypt2 = crypt(string2, "50");
printf("crypt1: %s\n", crypt1); // crypt1: 50hmnpE.bRNiU
printf("crypt2: %s\n", crypt2); // crypt2: 50hmnpE.bRNiU

为了保留(并比较)两个结果,您必须strdup()它们或将它们复制到单独的数组中。

关于与 strcmp 比较加密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48943716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com