2 malloc ze malloc_ze 于 2017.01.04 18:17 提问

求大神帮我看下这段程序,运行到“输入第二个学生姓名”就崩溃了。

#include
#include
struct student
{
int age;
char name[40];
float score;
};

void intput(struct student **st, int len);
void output(struct student **st, int len);

int main (void)
{
int len;
printf("请输入学生人数:");
scanf("%d", &len);
struct student * st = (struct student*)malloc(sizeof(struct student) * len);
intput(&st, len);
output(&st, len);

return 0;

}

void intput(struct student **st, int len)
{
int i;
for (i=0; i {
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}

void output(struct student **st, int len)
{
int i;
for (i=0; i {
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}

4个回答

YXTS122
YXTS122   2017.01.04 18:30

这程序没必要用到二级指针吧?intput(st,len);这样不是很好么?

YXTS122
YXTS122 output(st,len);改为这样
12 个月之前 回复
YXTS122
YXTS122 把**改为*试试
12 个月之前 回复
malloc_ze
malloc_ze 其实都不用用函数啦,我就是试试这样能不能不实现,然后现在出现问题,自己还找不到,就来问了
12 个月之前 回复
YXTS122
YXTS122   2017.01.04 23:11

#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
char name[40];
float score;
};
void intput(struct student **st, int len);
void output(struct student **st, int len);
int main (void)
{
int k;
const int len=3;
struct student st[len];
for (k=0;k<len;k++)
{
st[k]= (struct student
)malloc(sizeof (struct student) );
}
intput(st, len);
output(st, len);
return 0;
}
void intput(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}
void output(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}
改为这样试试

YXTS122
YXTS122 这个复制得不是很好,漏了个 *
12 个月之前 回复
YXTS122
YXTS122   2017.01.04 23:17

#include <stdio.h>
#include <malloc.h>

struct student
{
int age;
char name[40];
float score;
};
void intput(struct student **st, int len);
void output(struct student **st, int len);
int main (void)
{
int k;
const int len=3;
struct student * st[len];
for (k=0;k<len;k++)
{
st[k]= (struct student * )malloc(sizeof (struct student) );
}
intput(st, len);
output(st, len);
return 0;
}
void intput(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}
void output(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}

qq423399099
qq423399099   Ds   Rxr 2017.01.05 10:52

改变指针指向的内存空间的内容,用一级指针就行了。
要改变指针的指向才需要用二级指针。
改成下面这样就行了:

 #include <stdio.h>
#include <malloc.h>
struct student
{
    int age;
    char name[40];
    float score;
};

void intput(struct student *st, int len);
void output(struct student *st, int len);

int main(void)
{
    int len;
    printf("请输入学生人数:");
    scanf("%d", &len);
    struct student * st = (struct student*)malloc(sizeof(struct student) * len);
    intput(st, len);
    output(st, len);

    return 0;
}

void intput(struct student *st, int len)
{
    int i;
    for (i = 0; i<len; ++i)
    {
        printf("请输入第%d个人的姓名:", i + 1);
        scanf("%s", &st[i].name);
        printf("请输入第%d个人的年龄:", i + 1);
        scanf("%d", &st[i].age);
        printf("请输入第%d个人的分数:", i + 1);
        scanf("%f", &st[i].score);
    }
}

void output(struct student *st, int len)
{
    int i;
    for (i = 0; i<len; ++i)
    {
        printf("第%d个人的信息:\n", i + 1);
        printf("姓名:%s\n", st[i].name);
        printf("年龄:%d\n", st[i].age);
        printf("分数:%f\n", st[i].score);
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!