通过 C 中的文件使用 crypt 函数进行身份验证(分段错误)

Authentication with crypt function via File in C (Segmentation fault)

我有下面的代码,我首先尝试在情况 1 中:注册一个新密码并将其写入文件,这有效,我遇到的问题是在情况 2 中:我正在尝试的地方让用户通过 crypt 函数提供密码来对其进行加密,然后使用先前文件中的所有加密密码对其进行身份验证。但是当我编译这个时,我收到一个错误 "Segmentation Fault"。在我看来,问题出在 log_password 和加密消息的转换中。任何帮助都会很棒。

#define _GNU_SOURCE
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
#include <string.h>
#include <sys/stat.h>


int
main(void)
{

FILE *f=fopen("shadow.txt","a+");  

  char * line=NULL;
  unsigned long seed[2];
  char *log_password,salt[] = "$........";
  const char *const seedchars =
    "./0123456789ABCDEFGHIJKLMNOPQRST"
    "UVWXYZabcdefghijklmnopqrstuvwxyz";



  char *password,*pass;
  int i,ans;

  /* Generate a (not very) random seed.
     You should do it better than this... */
  seed[0] = time(NULL);
  seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);

  /* Turn it into printable characters from ‘seedchars’. */
  for (i = 0; i < 8; i++)
    salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];


  printf("Press 1 for Register.\n");
  printf("Press 2 for Login.\n");
  printf("Press 3 for Exit.\n");
  scanf("%d",&ans);
  switch(ans)
  {
    case 1: 

            password = crypt(getpass("Password:"), salt);
            fprintf(f,"%s \n",password);
            printf("Succesfull Register in file\n");
            fclose(f);
            break;


    case 2: 


            fgets(pass,34,f);
            log_password =  crypt(getpass("Login Password:"), pass);
            int ok;
            ok = strcmp (log_password, pass) == 0;
            puts(ok ? "Access granted." : "Access denied.");
            return ok ? 0 : 1;
            break;

    case 3: 
            printf("Bye\n");
            exit(1);
            break;

    default: 
            printf("Try Again.\n");
            break;
  }


  return 0;
}

答案是我忘了分配内存...

#define pass_size 1000
 pass=calloc(pass_size,sizeof(char));