为了账号安全,请及时绑定邮箱和手机立即绑定

带有文件的分段错误(核心转储)(C-linux)

带有文件的分段错误(核心转储)(C-linux)

守着星空守着你 2021-03-29 13:13:46
当我尝试运行它时出现分段错误(核心转储)。它可以完美地编译,但是出现错误,我也不知道为什么。文件写入必定有问题,因为没有它,效果很好。任何帮助将是巨大的。谢谢!#include <stdio.h>#include <time.h>#include <unistd.h>#include <crypt.h>#include <string.h>intmain(void){FILE *f=fopen("shadow1.txt","w");  if (f=NULL)  {    printf("ERROR");  }  unsigned long seed[2];  char salt[] = "$1$........";  const char *const seedchars =    "./0123456789ABCDEFGHIJKLMNOPQRST"    "UVWXYZabcdefghijklmnopqrstuvwxyz";  char *password;  int i;  /* 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];  /* Read in the user’s password and encrypt it. */  password = crypt(getpass("Password:"), salt);  /* Print the results. */  //fprintf(f,"%s $ %s",password);  printf("Success Registration to file !");  fclose(f);  return 0;}
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

 if (f=NULL)

  {

    printf("ERROR");


  }

是问题所在...


查看完整回答
反对 回复 2021-04-16
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您没有分配空间来容纳用户名,因此它将在scanf上出现段错误。


查看完整回答
反对 回复 2021-04-16
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

void Register(char u,char p) {


您可能希望这些是char *因为fprintf将它们视为字符串:


fprintf(f,"%s $ %s",u,p);


并且由于您传递了char *s:


char *password,*username;

//...

Register(username,password);

这很可能已被编译器警告捕获。从编译器得到答案的速度比从这里得到的速度要快得多。


如果您无法弄清楚程序为何无法运行,则可以使用启用所有需要的警告,-Wall -Wextra然后使用将警告变成错误-Werror。


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信