Как я могу вернуть возвращаемое значение функции, тип которой является структурой? - PullRequest
0 голосов
/ 28 января 2019

Я хочу получить возвращаемое значение функции, тип которой представляет собой структуру.Вот что я получил:

Вот как я определил свою структуру

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

Функция, вызываемая в main:

read_content("example.txt");

Вот моя функция, вызываемая main:

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

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

Можно ли даже вернуть значение в функцию, тип которой является структурой?Как мне решить мою проблему?

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 28 января 2019

У вас несоответствие типов в вашей функции.Он возвращает указатель на 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 память в вызывающей функции.

0 голосов
/ 28 января 2019
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;
}
0 голосов
/ 28 января 2019

в

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
}

но предупреждение вы получаете копию структуры, но строки не дублируются

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...