установка переменной для типа возврата функции - PullRequest
0 голосов
/ 10 августа 2011

Я не могу понять, почему это не сработает, я передаю переменную 'aHouse' функцию, которая возвращает House. Я новичок в C, поэтому все еще пытаюсь разобраться в нескольких вещах.

#include <stdio.h>

typedef struct house {
    int id;
    char *name;
} House;

House getHouse()
{
    House *myHouse = NULL;

    char c = getchar();
    myHouse->id = 0;
    myHouse->name = c; /*only single char for house name*/

    return *myHouse
}

int main()
{
    House *aHouse = NULL;

    aHouse = getHouse();
}

1 Ответ

5 голосов
/ 10 августа 2011

Во-первых: Вы используете указатель NULL и присваиваете ему значения в функции 'getHouse'. Это неопределенное поведение и должно привести к нарушению прав доступа.

Кроме того, вы возвращаете объект House по значению из getHouse и пытаетесь назначить тип указателя. Указатель и значение - это две разные вещи.

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

House getHouse()
{
    House myHouse;

    char c = getchar();
    myHouse.id = 0;
    myHouse.name = c; /*only single char for house name*/

    return myHouse
}

int main()
{
    House aHouse;

    aHouse = getHouse();
}

РЕДАКТИРОВАТЬ: ради эффективности, вы можете реализовать это так:

void getHouse(House* h)
{ 
    char c = getchar();
    h->id = 0;
    h->name = c; /*only single char for house name*/
}

int main()
{
    House aHouse;    
    getHouse(&aHouse);
}

ИЗМЕНИТЬ еще раз: Также в структуре Дома, поскольку имя может быть только одним символом, не используйте символ * для имени, просто используйте символ.

...