嵌套的结构数组的麻烦

时间:2017-07-02 02:34:12

标签: c arrays struct

在从函数调用返回后,我无法获取嵌套的结构数组以保留其成员。

这是我在头文件中定义的(为了可读性而使用精简结构成员):

typedef struct {
    char *name;
} weapon;

#define MAX_SHOP_ITEMS 10
struct shop {
    weapon items[MAX_SHOP_ITEMS];
};

typedef struct {
    char *name;
    struct shop shop;
} location;

我使用这些函数将成员添加到shop.items []数组结构中。 beginnerWeapon []是类型武器,在另一个文件中声明了元素0和1:

void PopulateShop(location loc)
{
    printf("DEBUG: character location pointer: %s\n\n\n", loc.name);

    loc.shop.items[0] = beginnerWeapons[0];
    loc.shop.items[1] = beginnerWeapons[1];

    printf("DEBUG: loc.shop.items[0].name: %s\n\n\n", loc.shop.items[0].name);
}

void ShowItems(location loc)   
{
    printf("DEBUG: location pointer in ShowItems(): %s\n\n\n", loc.name);
    printf("DEBUG: loc.shop.items[0].name: %s\n\n\n", loc.shop.items[0].name);
}

现在,当我通过此函数将位置从另一个文件传递给每个函数时:...

void ShopMenu(location loc)
{
    PopulateShop(loc);
    ShowItems(loc);
}

...调试在两个函数中正确显示位置名称,正确的武器名称显示在PopulateShop()中,但shop.items []数组更改在我调用ShowItems时不会粘贴( )。我不确定是否需要为.items []分配内存,或者将其外部化,或者改为通过指针(我不完全确定如何处理下标),或者我也不知道如何处理。 m定义商店错误。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

使用Kaylum建议的指针修复 -

void PopulateShop(location *locIn)
{
    location loc = *locIn;

    loc.shop.items[0] = beginnerWeapons[0];
    loc.shop.items[1] = beginnerWeapons[1];

    *locIn = loc;
}

我花了一分钟才意识到我需要将局部变量保存回指针。谢谢你的帮助!

编辑:

  

要小心 - 这只适用于结构,因为结构的复制构造函数需要成员副本... David C. Rankin

很高兴知道。

locIn->shop.items[0] = beginnerWeapons[0];
locIn->shop.items[1] = beginnerWeapons[1];

我也学到了相当于

(*locIn).shop.items[0] = myArr[i];

正如我在顶部提到的,我不确定如何使用struct subscripting指针。现在我的学习上限还有另外一根羽毛,感谢大家!