【问题标题】:Initializing a certain struct field on-initialization in C在C中初始化某个结构字段
【发布时间】:2015-05-12 17:17:56
【问题描述】:

我想在这里做的是用空字符串值""初始化所有玩家的名字,我听说可以在C99的声明点完成,但我不完全确定如何。

typedef struct data_players
{   char name[25];
    int hp;
    int mana;
    int id;

}player;

player player_list[10]

在这种情况下我应该如何处理?

【问题讨论】:

  • 您正在编辑问题,导致答案无效。在这里不是一件好事。
  • 我知道,我忘记了这个问题的一个相当重要的方面,抱歉。

标签: c string struct


【解决方案1】:
struct data_players
{   char name[25];

} player = "";

struct data_players
{   char name[25];

} player = { "" };

这会在声明时初始化结构的第一个成员。如果有更多成员,用逗号分隔。 还有一件事。您的结构不应在声明时进行类型定义以进行这种初始化。


如果你有一个结构数组并且你想在 C99 中初始化它们,你可以在声明时使用“指定初始化器”。

player arr [2] = { {.name = ""}, {.name = ""} };

这会将arr[0]arr[1] 的名称成员初始化为空字符串。虽然我认为它没有多大意义,因为它无论如何都默认为空字符串。

【讨论】:

  • 嗯,也许我的例子不是那么好,因为结构中有多个字段,不仅是名称,那样的话,会怎么样?很抱歉造成误解。
  • @Zetsuno 我现在看到你已经接受了 mtijanic 的提议。好东西它有帮助.. 虽然他的解决方案不是 C99 特定的,而是 C89 特定的。我提供的指定初始化器不仅是 C99 特定的,而且是一种更好的初始化方式(:考虑到这一点。
【解决方案2】:

在声明时,您使用{} 初始化结构,如下所示:

player player_list[10] = {{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0}};

请注意,任何跳过的初始化程序都将默认为零,因此如果您始终将整个数组初始化为零,这就足够了:

player player_list[10] = {0};

还要注意,如果player_list 是全局变量或静态变量,它会自动初始化为全零。好像你叫了

memset(player_list, 0, sizeof(player_list));

在程序开始时。

【讨论】:

  • 非常感谢,这确实解决了我的问题,因为在我的情况下,是否将所有内容都初始化为零并不重要。
  • player player_list[10] = {}; 正在使用 GNU C 扩展。 {0} 是 ISO C 方式。
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多