gpt4 book ai didi

C\UNIX\strcmp 第一次用错了,其他都改正

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:48 24 4
gpt4 key购买 nike

嘿,我在 Microsoft VS 上写了一些代码,假设将输入的密码与存储在数据库中的密码进行比较,并返回批准或拒绝...它在 Windows 上运行得非常好,但是在转换为 UNIX(使用 eclipse)之后发生了一件有趣的事情 - 总是,第一次调用这个函数不会在它应该返回批准的值时返回,但是再次调用函数返回完全相同的参数批准...根据需要。调试后,我很确定问题出在“strcmp”中,它在第一次运行时返回 false,而在所有其他运行中使用完全相同的参数返回 true。

有人知道可能是什么问题吗??

命令示例:添加jt 111//将密码添加到数据库

登录jt 111

denied

登录jt 111

approved

void login_helper(char *user, char *password){
int found = 0;
int i;
for (i=0 ; i<space ; i++){
if (strcasecmp(data[i].name,user) == 0) {
found = 1;
if (strcmp(data[i].hash ,Md5FromString(password)) == 0)
{
printf("approved.\n");
break;
}
else {
printf("denied.\n");
break;
}
}
}
if (found == 0) printf("denied.\n");
}

最佳答案

我预测对 Md5FromString(password) 的调用会返回一个指向缓冲区的指针,当 Md5FromString() 函数返回时,该指针不再有效。这意味着您遇到了未定义的行为,并且在某些情况下幸运而在其他情况下不幸。

将代码发布到 Md5FromString()

关于C\UNIX\strcmp 第一次用错了,其他都改正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5559437/

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