标题:我定义一个函数,函数的返回值是结构体的地址,来给主函数里的指针数组进行 ...
只看楼主
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
结帖率:61.54%
已结贴  问题点数:20 回复次数:9 
我定义一个函数,函数的返回值是结构体的地址,来给主函数里的指针数组进行赋值,这个函数应该怎么样定义,求帮助。我这样行不行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _STU
{
    char name[20];
    char sex;
    int age;
    int high;
}STU;

STU getstu(void);

int main(int argc , char **argv)
{
    int i = 0;
    STU *stu[50];
    stu[0] = (STU*)malloc(sizeof(STU));

   
    stu[i] = getstu();
    i++;
   
}

int getstu(void)
{
    STU stu;
    printf("name: \n");
    fflush(stdin);
    gets(stu.name);
    printf("sex: \n");
    scanf("%c",&stu.sex);
    printf("age: \n");
    scanf("%d",&stu.age);
    printf("high: \n");
    scanf("%d",&stu.high);

    return &stu;   

}
搜索更多相关主题的帖子: void include 结构体 
2013-04-25 18:54
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
void getstu(STU *stu)

main里面
stu[0] = (STU*)malloc(sizeof(STU));
getstu(stu[0]);
2013-04-25 19:18
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
得分:0 
回复 2楼 apull
谢谢,但是不可以用地址作为函数的返回值吗?
2013-04-25 19:44
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
STU * getstu(STU *stu) 也可以。

要注意的是函数内定义的变量在函数退出后会被销毁,容易产生野指针。
2013-04-26 01:05
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:5 
以下是引用apull在2013-4-26 01:05:10的发言:

STU * getstu(STU *stu) 也可以。
 
要注意的是函数内定义的变量在函数退出后会被销毁,容易产生野指针。

他说得对,要用指针的指针

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-26 06:51
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
得分:5 
int getstu(void)
{
    STU stu;
    printf("name: \n");
    fflush(stdin);
    gets(stu.name);
    printf("sex: \n");
    scanf("%c",&stu.sex);
    printf("age: \n");
    scanf("%d",&stu.age);
    printf("high: \n");
    scanf("%d",&stu.high);

    return &stu;   

}

典型的返回局部变量的指针 99.99999……% 出错

人生是一场错过 愿你别蹉跎
2013-04-26 08:40
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
得分:0 
回复 5楼 peach5460
能不能用具体的代码给我解释一下,有点没太理解。
2013-04-26 10:21
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
得分:0 
回复 4楼 apull
#include <stdio.h>
#include <stdlib.h>

typedef struct _STU
{
    int age;
    char sex;
}STU;

STU* getstu(void);

int main(int argc , char **argv)
{
    STU *stu[50];
    stu[0] = (STU*)malloc(sizeof(STU));

    stu[0] = getstu();

    printf("%d",stu[0]->age);

    return EXIT_SUCCESS;
}

STU* getstu(void)
{
    STU *stu;
    printf("age: \n");
    scanf("%d",&stu->age);

    return stu;
}
我这样为什么不行.?
2013-04-26 11:26
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
得分:5 
int main(int argc , char **argv)
{
    STU *stu[50];
    //stu[0] = (STU*)malloc(sizeof(STU));

    stu[0] = getstu();

    printf("%d",stu[0]->age);

    return EXIT_SUCCESS;
}

STU* getstu(void)
{
    STU *stu = (STU*)malloc(sizeof(STU));
    printf("age: \n");
    scanf("%d",&stu->age);

    return stu;
}

函数返回的stu其实是个野指针 分配要放在函数里

人生是一场错过 愿你别蹉跎
2013-04-26 11:41
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
得分:0 
回复 9楼 fanpengpeng
谢谢。
2013-04-27 15:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-405517-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049807 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved