C Struct读/写垃圾值到文件

时间:2011-11-16 07:55:41

标签: c file-io struct garbage

我在很长一段时间内潜入C语言,并且正在努力阅读和编写简单文本文件中的struct。我发现了这个编程,我发现它的读取和写入文件的垃圾值。有人能帮我吗。这是我的代码

#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;

}

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

2 个答案:

答案 0 :(得分: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语句。

答案 1 :(得分:0)

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

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