Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C\UNIX\strcmp首次使用错误,请在其他时间更正_C_Unix_Strcmp - Fatal编程技术网

C\UNIX\strcmp首次使用错误,请在其他时间更正

C\UNIX\strcmp首次使用错误,请在其他时间更正,c,unix,strcmp,C,Unix,Strcmp,嘿,我在微软VS上写了一些代码,它假设将输入的密码和存储在数据库中的密码进行比较,并返回批准或拒绝的密码。。。 它在windows上运行得非常好,但是在转换到UNIX(使用eclipse)之后,发生了一件有趣的事情-总是,第一次调用此函数不会在应该返回的时候返回已批准的值,但是再次调用具有完全相同的参数的函数会返回已批准的值。。。如所愿。 在调试之后,我很确定问题出在“strcmp”中,它在第一次运行时返回false,在所有其他运行时在完全相同的参数上返回true 有人知道问题出在哪里吗 命令的

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

有人知道问题出在哪里吗

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

登录jt 111

否认

登录jt 111

批准

void login\u helper(字符*用户,字符*密码){
int=0;
int i;

对于(i=0;i我预测对
Md5FromString(password)
的调用返回一个指向缓冲区的指针,该缓冲区在
Md5FromString()
函数返回时不再有效。这意味着您遇到了未定义的行为,在某些情况下运气好,而在另一些情况下运气不好


将代码发布到
Md5FromString()

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


将代码发布到
Md5FromString()

我真的怀疑strcmp()中是否有任何问题。:-)

(安德鲁·亨特(Andrew Hunt)和大卫·托马斯(David Thomas)写了一本关于软件开发的好书,书名为《实用程序员》(The Practical Programmer),其中有一个关于调试的技巧,名为“select”未被破坏”,这最终意味着基本系统函数(如select()或strcmp())不太可能被破坏。)

您是否尝试在strcmp()之前打印“data[i].hash”的内容和“Md5FromString(password)”返回的值

比如:

            char *md5;
            ...
            md5 = Md5FromString(password);
            printf("i: %d, hash: %s, md5: %s\n", i, data[i].hash, md5);
            if (strcmp(data[i].hash, md5) == 0)
                {
                ...
另外,谁为函数Md5FromString()分配内存?能否发送Md5FromString()的代码

干杯,
保罗

我真的怀疑strcmp()有什么问题。:-)

(安德鲁·亨特(Andrew Hunt)和大卫·托马斯(David Thomas)写了一本关于软件开发的好书,书名为《实用程序员》(The Practical Programmer),其中有一个关于调试的技巧,名为“select”未被破坏”,这最终意味着基本系统函数(如select()或strcmp())不太可能被破坏。)

您是否尝试在strcmp()之前打印“data[i].hash”的内容和“Md5FromString(password)”返回的值

比如:

            char *md5;
            ...
            md5 = Md5FromString(password);
            printf("i: %d, hash: %s, md5: %s\n", i, data[i].hash, md5);
            if (strcmp(data[i].hash, md5) == 0)
                {
                ...
另外,谁为函数Md5FromString()分配内存?能否发送Md5FromString()的代码

干杯,
Paulo < /P>发布代码或它没有发生。))他发布了代码,他只是没有格式化它,并且因为<代码> @ YYVAL,你认为问题可能来自你的Md5FROWSHIPE函数吗?@ ZENAK:是的,典型的,我忘了检查。< /代码>在相同的参数下总是具有相同的返回值。我建议您检查所传递的字符串是否为您所认为的并且正确的Null终止。张贴代码或它没有发生。))他发布了代码,他只是没有格式化,并且因为<代码> @ YYVAL,您认为问题可能吗?是否来自Md5FromString函数?@zneak:yep,很典型,我忘了检查。:swi没有看到您的代码,很难诊断问题,但我非常确定
strcmp()
在给定相同参数的情况下,将始终具有相同的返回值。我建议您检查所传递的字符串是否与您认为的相同,并且是否正确以null结尾。