1

经过很长一段时间后,我正在潜入 C 并努力将结构读写到简单的文本文件中。我调试了这个 prog,发现它在文件中读取和写入垃圾值。有人能帮我吗。这是我的代码

#define MAX_UserName_LEN 16
#define MAX_Password_LEN 8
#define MAX_FileName_LEN 32

struct userDetails
{
char userName[MAX_UserName_LEN];
char password[MAX_Password_LEN];
};

int registration(struct userDetails userInfo)
{
FILE *userDb;
userDb= fopen("UserDataBase.txt","a");
if(fwrite(&userInfo,sizeof(userInfo),1,userDb))
{
    fclose(userDb);
    return 1;
}
else
{
    return 0;
}

}

int authenicate(struct userDetails userInfo)
{
FILE *userDb;
struct userDetails temp;
userDb = fopen("UserDataBase.txt","r");
while(!feof(userDb))
{
  fread(&temp,sizeof(temp),1,userDb);
  if (temp.userName==userInfo.userName && temp.password==userInfo.password)
  {
    printf("Logged In Sucessfully");
    return 1;
  }
 }
 return 0;

}

在主函数中,我只是声明一个结构变量并接受用户输入到该结构并将其传递给上述两个函数。

4

2 回答 2

3

我看到的第一个主要问题在这里:

if (temp.userName==userInfo.userName && temp.password==userInfo.password)

您正在尝试将字符串与==. 您需要strcmp()改用:

if (strcmp(temp.userName, userInfo.userName) == 0 && 
    strcmp(temp.password, userInfo.password) == 0)

我不确定这是否与您得到的“垃圾”有关,但这绝对是一个错误。

由于您的代码现在,它永远不会进入 if 语句。

于 2011-11-16T07:58:31.313 回答
0

编写一个简短的代码,打印用户列表,这样您就可以看到文件是否包含垃圾。

无论如何,密码应该以某种方式加扰。即使是一个愚蠢的解决方案也比没有好,只是为了让它不被人眼阅读。比如说,对于 (n = 0; n < strlen(pwd); n++) pwd[n] ^= 0x55; .

于 2011-11-16T08:09:46.593 回答