入力されたパスワードをデータベースに保存されているパスワードと比較し、承認または拒否を返すと思われるMicrosoft VSでコードを書きました... Windowsでは完全に機能しましたが、UNIXに変換した後(Eclipseを使用)、面白いことが起こりました-常に、この関数への最初の呼び出しは、承認された値を返す必要がありますが、まったく同じパラメーターで関数を再度呼び出すと、承認された...必要に応じて返されます。デバッグ後、問題は「strcmp」にあると確信しています。これは、最初の実行で false を返し、まったく同じパラメーターでの他のすべての実行で true を返します。
何が問題なのか誰にも考えがありますか??
コマンドの例: add 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");
}