C结构读/写垃圾值到文件

标签 c file-io struct garbage

经过很长一段时间,我开始深入研究 C,并努力在简单文本文件中读取和写入结构。我调试了这个程序,发现它在文件中读取和写入垃圾值。有人能帮我吗。这是我的代码

#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 函数中,我只是声明一个结构变量并接受用户对该结构的输入并将其传递给上述两个函数。

最佳答案

我看到的第一个主要问题是:

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

您正在尝试将字符串与 == 进行比较。您需要改用 strcmp():

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

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

就目前的代码而言,它永远不会进入 if 语句。

关于C结构读/写垃圾值到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148338/

相关文章:

c - 我的 for 循环打印出垃圾 - 我找不到错误

c++ - 如何将整数值 "0"存储在 .bin 文件中? (C++)

c++ - 结构数组中按字母顺序排序的问题气泡

c++ - C、C++ 从二进制文件中提取结构成员

c - C中的二进制除法

c - 蒙蒂霍尔实现

matlab - 从 textread 更改为 textscan MATLAB

c# - 异步方法在调用时不会返回

c - 如何在 C 中实现位集

c - 具有递归调用的线性搜索算法?