将char指针数组的值复制到char数组

时间:2015-08-05 10:33:58

标签: c++ arrays struct

这是一个简单的游戏,我正在尝试学习如何在现有项目中应用C ++(这是我最好的学习方式),我有使用C#和其他高级语言编程的经验,所以它很我还是新来的。所以我有这个种族名单:

const char* Races[] = {
   "Demon",
   "Human",
   "Elf",
   "Orc",
   "Aliens"
};

有一次我收到了用户的注册并选择了比赛。我将用户的所有信息保存到结构中,我也希望将比赛的全名保存到此结构中。

struct User_t {
   unsigned int RaceID;
   char Race[16];
};

以下代码是我将值放在struct中的代码:

User_t User;

User.RaceID = 3;
strcpy(User.Race, Races[User.RaceID]);

然而,这不起作用。这是游戏的一部分,异常处理非常糟糕(它基本上会在没有任何错误可见的情况下崩溃游戏)。我想弄清楚我做错了什么。任何建议,也许是关于其他事情的建议?

3 个答案:

答案 0 :(得分:5)

  

我想知道我做错了什么。任何建议,也许是关于其他事情的建议?

您正在尝试使用C ++,就好像它是C语言(这在语法上是可能的),并且您不能很好地了解C和C ++。

帮自己一个忙,并在真正的 C ++中做到:

std::string Races[] = {
   "Demon",
   "Human",
   "Elf",
   "Orc",
   "Aliens"
};

struct User {
  unsigned int RaceID;
  std::string Race;

  explicit User(unsigned int rid)
  : RaceID(rid)
  , Race(Races[rid])
  {}
};

User user(3);

std::cout << user.Race << '\n';

答案 1 :(得分:0)

我建议您浏览enum class{}。使您的代码不易出错更容易。

您可以这样编写代码:

enum class eRaces
{
    eDemon,
    eHuman,
    eElf,
    eOrc,
    eAlien,
};

struct User
{
    eRaces myRace;
};

User User;

User.myRace = eRaces::eElf;

答案 2 :(得分:-1)

假设Races数组的范围是全局的,您可以简单地避免复制它,只需执行以下操作:

struct User_t {
   unsigned int RaceID;
   const char* Race;
};

User_t User;

User.RaceID = 3;
User.Race = Races[User.RaceID];

您也可以使用评论中提到的std::string,但您不会避免复制它。自从开发游戏以来,我认为性能优先于c ++语言的客观性。