在C中初始化时初始化某个结构字段

在C中初始化时初始化某个结构字段,c,string,struct,C,String,Struct,我想在这里做的是用空字符串值“”初始化所有玩家的名字,我听说可以在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 = ""; 或 这

我想在这里做的是用空字符串值
”初始化所有玩家的名字,我听说可以在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 = "";


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


如果您有一个结构数组,并且希望在C99中初始化它们,那么可以在声明时使用“指定的初始值设定项”

player arr [2] = { {.name = ""}, {.name = ""} };
这将把
arr[0]
arr[1]
的name成员初始化为空字符串。尽管我认为它没有多大意义,因为它默认为空字符串


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


如果您有一个结构数组,并且希望在C99中初始化它们,那么可以在声明时使用“指定的初始值设定项”

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

这将把
arr[0]
arr[1]
的name成员初始化为空字符串。尽管我认为它没有多大意义,因为它默认为空字符串。

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

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] = {{"", 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));

在程序开始时。

Hm,也许我的示例不是很好,因为结构中有多个字段,而不仅仅是名称,在这种情况下,会是什么样?很抱歉误会。@Zetsuno我知道你已经接受了mtijanic的提议。幸好它有帮助。。虽然他的解决方案不是针对C99,而是针对C89。我提供的指定初始值设定项不仅是C99特定的,而且是一种更好的初始化方式(:考虑到这一点。嗯,也许我的例子不太好,因为结构中有多个字段,不仅是名称,在这种情况下,那会是什么?很抱歉误解。@Zetsuno我知道现在你已经接受了mtijanic的提议。很好,它起到了帮助。虽然他的解决方案不是C99特定的,而是C89特定的。d我提供的esignated初始化器不仅是C99特定的,而且是一种更好的初始化方法(:考虑到这一点。你在编辑问题,使答案无效。这不是一件好事。我知道,我忘记了问题的一个相当重要的方面,道歉。你在编辑问题,使答案无效。这不是一件好事。我知道,我忘了问题的一个相当重要的方面,道歉。谢谢lot,这确实解决了我的问题,因为在我的例子中,如果我将所有内容初始化为零,这其实并不重要。
player-player\u-list[10]={};
正在使用GNU C扩展。
{0}
是ISO C方式。非常感谢,这确实解决了我的问题,因为在我的情况下,如果我将所有内容初始化为零,这并不重要。
玩家列表[10]={};
使用GNU C扩展。
{0}
是ISO C方式。