C写的,偶刚学,帮忙看下问题在哪儿?

来源:百度知道 编辑:UC知道 时间:2024/06/09 20:30:53
#include <stdio.h>
#include <stdlib.h>

struct stu
{
int num;
char *name;
char sex;
float score;
struct stu *pnext;
};

struct stu *create(int n)
{
int i;
struct stu *head,*temp,*nonce;
for(i=1;i<=n;i++)
{
nonce=(struct stu*) malloc (sizeof(struct stu));
printf("请按照下列格式输入:\n学号 姓名 性别 成绩\n");
scanf("%d %s %c %f",&nonce->num,&nonce->name,&nonce->sex,&nonce->score);
if (i==1)
head=nonce;
else
temp->pnext=nonce;
nonce->pnext=0;
temp=nonce;
}
return(head);
}

void main()
{
struct stu *pstu;
pstu=create(1);
printf("%s\n",pstu->name);
//printf("学号:%d\n姓名:%s\n性别:%c\n成绩:%.2f\n",pstu->num,pstu->name,pstu->sex,pstu->score);
}

已经确定问题就出在pstu->name上面;

应该用字符串数组来定义name,如果定义成指针就一定要在读取前申请内存空间。比如这样写。而且读取字符串时不要加&
#include <stdio.h>
#include <stdlib.h>

struct stu
{
int num;
char *name;
char sex;
float score;
struct stu *pnext;
};

struct stu *create(int n)
{
int i;
struct stu *head,*temp,*nonce;
for(i=1;i<=n;i++)
{
nonce=(struct stu*) malloc (sizeof(struct stu));
printf("请按照下列格式输入:\n学号 姓名 性别 成绩\n");
nonce->name=new char (20);
scanf("%d %s %c %f",&nonce->num,nonce->name,&nonce->sex,&nonce->score);
if (i==1)
head=nonce;
else
temp->pnext=nonce;
nonce->pnext=0;
temp=nonce;
}
return(head);
}

int main()
{
struct stu *pstu;
pstu=create(1);
printf("%s\n",pstu->name);
printf("学号:%d\n姓名:%s\n性别:%c\n成绩:%.2f\n",pstu->num