首先使用C UNIX strcmp是错误的,所有其他时间都是正确的

嘿所有我在微软VS上写了一些代码,假设将输入的密码与存储在数据库中的密码进行比较并返回批准或拒绝... 它在windows上运行得非常好,但在转换为UNIX(使用eclipse)之后发生了一件有趣的事情 - 总是,第一次调用此函数时不会返回已批准的值,但是使用完全相同的params再次调用该函数根据需要批准...... 在调试之后我很确定问题出在“strcmp”中,在第一次运行时返回false,在完全相同的参数上的所有其他运行中返回true。 任何人都知道可能是什么问题? 命令的示例: 添加jt 111 //将密码添加到DB 登录jt 111        否认    登录jt 111        批准   
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()
。     
我真的怀疑strcmp()中有任何问题。 :-) (有一本关于软件开发的优秀书籍,名叫“实用程序员”,安德鲁·亨特和大卫·托马斯,它有一个关于调试的提示称为“'选择'没有被破坏”,这最终意味着基本系统功能真的不太可能(例如select()或strcmp())被破坏。) 您是否尝试在strcmp()之前打印'data [i] .hash'的内容和'Md5FromString(password)'返回的值? 就像是:
            char *md5;
            ...
            md5 = Md5FromString(password);
            printf("i: %d, hash: %s, md5: %sn", i, data[i].hash, md5);
            if (strcmp(data[i].hash, md5) == 0)
                {
                ...
另外,谁为函数Md5FromString()分配内存?你能发送Md5FromString()的代码吗? 干杯, 圣保罗     

要回复问题请先登录注册