关于C语言动态分配结构体数组

raymondguo008 2009-07-12 02:33:49
想要动态输入学生信息,但是运行时候总出错。
不知道哪里错了。
望高手指点!


#include <stdio.h>

int len;
int i,j;

struct stu {
int num;
char *name;
char sex;
};

struct stu * create() {
struct stu *ps;

printf("Input total students!\n");
scanf("%d",&len);
ps=(struct stu *)malloc(len*sizeof(struct stu));
for(i=0;i<len;i++) {
scanf("%d%s%c\n",&ps[i].num,&ps[i].name,&ps[i].sex);
}
return ps;
}

void myPrint(struct stu *ps) {
for(j=0;j<len;j++) {
printf("%d %s %c\n",ps[j].num,ps[j].name,ps[j].sex);
}
}

main() {
struct stu *p;
p=create();
myPrint(p);
getch();
return 0;
}
...全文
1596 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymondguo008 2009-07-12
  • 打赏
  • 举报
回复
谢谢诸位~
raymondguo008 2009-07-12
  • 打赏
  • 举报
回复
第一次在CSDN提问
弱弱问下
怎么给你们加分呀!!!!?
Aeris 2009-07-12
  • 打赏
  • 举报
回复
ps=(struct stu *)malloc(len*sizeof(struct stu));

for(i=0;i<len;i++) {
ps[i].name = (char *)malloc(64); // 选个大小,能够容纳最长的名字
scanf("%d%s%c\n",&ps[i].num,ps[i].name,&ps[i].sex); // 去掉ps[i].name前面的&,其余两个&不变

//...下略


或者如2楼所说,改动一下struct的定义,直接在struct内部放置存放名字的地方

struct stu {
int num;
char name[64]; // 同样,要能容纳最长的名字
char sex;
};

如果这么改的话,那么下面的代码不用改
pengzhixi 2009-07-12
  • 打赏
  • 举报
回复
struct stu {
int num;
char *name;//如果是 指针那么你也要为它分配内存。否则这个成员未初始化。
char sex;
};
raymondguo008 2009-07-12
  • 打赏
  • 举报
回复
能说的详细点吗?
谢谢!
(从java转回来打基础。辛苦啊!)
Aeris 2009-07-12
  • 打赏
  • 举报
回复
char *name;这个成员必须另外分配缓冲区
baihacker 2009-07-12
  • 打赏
  • 举报
回复
struct stu {
int num;
char name[32];
char sex;
};

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧