从指针结构中显示元素

时间:2016-06-13 01:02:06

标签: c++ pointers struct

我遇到了一个小问题,我到处都看,但我相信我看错了方向。我在这里创建了一个帐户,希望解决我遇到的一个小问题。我正在编写RPG编程中,当我尝试显示一个角色"魔法咒语"时,我只能显示[3]。 [0] [1] [2]让我的比赛崩溃了。游戏是用C ++编写的。

我的代码示例如下:

创建我的结构:

struct Fighter {
    int HP;         //max 999
    int maxHP;
    int MP;         //max 999
    int maxMP;
    int STR;        //max 255
    int CON;        //max 255
    int AGL;        //max 100
    bool dead;
    const char* Magic[]; 
};

Fighter * player = new Fighter[5];

使用这些参数为4个党员初始化和分配元素:

void InitPlayer(int pClass, int p)
{
    if(pClass == 0) //Knight
    {
        player[p].maxHP = 750;
        player[p].HP = player[p].maxHP;
        player[p].maxMP = 0;
        player[p].MP = player[p].maxMP;
        player[p].STR = 200;
        player[p].CON = 0;
        player[p].AGL = 35;
    }
    else if(pClass == 1) //Ninja
    {
        player[p].maxHP = 675;
        player[p].HP = player[p].maxHP;
        player[p].maxMP = 0;
        player[p].MP = player[p].maxMP;
        player[p].STR = 175;
        player[p].CON = 0;
        player[p].AGL = 80;
        player[p].Magic[0] = "Cure";
        player[p].Magic[1] = "Haste";
        player[p].Magic[2] = "Sleep";
    }
    //... More Character code
}

我在这里绘制/打印"魔术"到屏幕:

Printf_xy(123,223,player[0].Magic[0]);  //Crash
Printf_xy(123,233,player[1].Magic[0]);  //Crash
Printf_xy(123,243,player[2].Magic[0]);  //Crash
Printf_xy(123,253,player[3].Magic[0]);  //Prints "Cure" does not crash

正如你所看到的,只有当我显示播放器[3]时它才会起作用。我确信我忘记做某事或错误地初始化某些东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Magic是一个零长度数组 - 当您为其分配任何内容时,甚至尝试访问Magic[0]时,您正在数组边界外访问。

如果您知道所需的魔术条目的最大数量,请将其用作数组大小,例如:

const int MagicLimit = 10

...

const char* Magic[MagicLimit]; 

更好的是,如果您使用的是c ++,请使用std :: vector来保存魔术字符串(也使用std :: string),这样您就可以轻松判断列表的长度。

例如:

std::vector<std::string> Magic;