我如何返回一个函数的返回值,后者的类型是结构?

时间:2019-01-28 17:16:14

标签: c function structure

我想接收一个函数的返回值,该函数的typ是结构。那就是我所拥有的:

这就是我定义结构的方式

typedef struct _content {
    int length;
    char **lines;    
} content_t;

主要调用的函数:

read_content("example.txt");

多数民众赞成在我的函数调用:

content_t *read_content(char *filename)
{
    struct _content cont;

return cont;   //here I try to return my struct cont
}

甚至可以在类型为struct的函数中返回值吗?我该如何解决我的问题?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

content_t *read_content(char *filename)
{
    struct _content cont;

    return cont;   //here I try to return my struct cont
}

您返回一个struct _content而预期会返回struct _content *

是的,您可以返回struct _content而不是指向的指针:

content_t read_content(char *filename)
{
    struct _content cont;

    return cont;   //here I try to return my struct cont
}

警告,您会获得该结构的副本,但未重复

答案 1 :(得分:1)

您的函数类型不匹配。它正在返回指向content_t(即content_t *)的指针,但是您正在返回content_t的实例。

您需要更改函数以返回指向content_t的指针。但是,您无法返回局部变量的地址,即return &cont;,因为该变量在函数返回时将超出范围,并且指针值在返回时将无效。但是,您可以做的是在函数中动态分配内存并返回指向该内存的指针。

content_t *read_content(char *filename)
{
    content_t *cont = malloc(sizeof(*cont));
    ...
    return cont;
}

请不要忘记free调用函数中的内存。

答案 2 :(得分:0)

content_t *read_content(char *filename)
{
    content_t *cont = malloc(sizeof(*cont));
    ...
    return cont;
}

content_t *read_content(char *filename, content_t *cont)
{
    ...
    return cont;
}

content_t *read_content(char *filename, content_t **cont)
{
    *cont = malloc(sizeof(**cont));
    ...
    return *cont;
}