在 C 中初始化某个结构字段 on-initialization

Initializing a certain struct field on-initialization in C

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

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

}player;

player player_list[10]

这种情况应该怎么办?

struct data_players
{   char name[25];

} player = "";

struct data_players
{   char name[25];

} player = { "" };

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


如果你有一个结构数组并且你想在 C99 中初始化它们,你可以在声明时使用 "designated initializer"。

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

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

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

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));

在程序开始时。