C 程序演示文件IO操作

C 程序演示文件IO操作,c,linux,C,Linux,我正在尝试用c编程开始io操作。我经常面对错误 “分段故障核心转储”。有没有人能清楚地解释我为什么会犯这个错误。 如何避免这个愚蠢的错误 提前谢谢 struct Subscriber { char *name; char msisdn[10+1]; }; int main() { FILE * ostream; ostream = fopen("UsersData.dat","w"); struct Subscriber record; do { printf(" E

我正在尝试用c编程开始io操作。我经常面对错误 “分段故障核心转储”。有没有人能清楚地解释我为什么会犯这个错误。 如何避免这个愚蠢的错误

提前谢谢

struct Subscriber { char *name; char msisdn[10+1]; };

int main() {

  FILE * ostream;
  ostream = fopen("UsersData.dat","w");
  struct Subscriber record;
  do {
    printf(" Enter subscriber record[name<Ent>msisdn<Ent>] :");
    scanf("%s",&record.name);
    scanf("%s",&record.msisdn);
    printf("Record [ %s | %s ] \n", record.name, record.msisdn);
    fwrite(&record, sizeof(record), 1, ostream);
    printf(" Do want to Insert new record? [y/n] : ");
    fflush(stdin);
  } while ('y' == getc(stdin));
  fclose(ostream);
  printf(" file closed ");
  return 0;
}
struct订户{char*name;char msisdn[10+1];};
int main(){
文件*ostream;
ostream=fopen(“UsersData.dat”,“w”);
结构用户记录;
做{
printf(“输入订户记录[namemsisdn]:”;
scanf(“%s”、&record.name);
scanf(“%s”和&record.msisdn);
printf(“记录[%s |%s]\n”,Record.name,Record.msisdn);
fwrite(和record,sizeof(record),1,ostream);
printf(“是否要插入新记录?[y/n]:”;
fflush(stdin);
}而('y'==getc(stdin));
fclose(ostream);
printf(“文件关闭”);
返回0;
}

您的类型
订户
包含一个名为
名称
char*
类型的成员;不幸的是,您从未为此指针分配任何内存。稍后执行
scanf
时,您试图读入不存在的
char
缓冲区

为什么不把
name
做成一个数组,比如
msisdn


另外,不要将代码写在难以辨认的矩形块中。那是。。。怪异。< /P>请编辑你的帖子,使代码易于阅读。我可以问你为什么你把它标记为C++问题,当这是完全纯C?另外,请组织你的代码,这是很难阅读任何东西在地球上你为什么要写这样的代码?o、 即使是未格式化的,char*加上当前的malloc也是一种赠品。不仅调试器是很棒的工具,编译器也是。该代码应显示大量诊断信息。例如,
scanf
调用中的
运算符显然是错误的。在发布之前,请在更正代码方面投入更多精力,请点击此处。投票结束。有点抱歉,非常感谢您的回答和建议大师