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