gpt4 book ai didi

c - 使用 malloc 初始化结构内部的结构?

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:16 24 4
gpt4 key购买 nike

这是我的 NPC 数据结构。

typedef struct npc {
npc_characteristics_t characteristics;
position pc_last_known_position;
position npc_position;
int speed;
int turn;
} npc_t;

我用这个初始化它:

void gen_monsters(dungeon *d, int nummon) {
int i;
for (i = 0; i < nummon; i++) {
npc_t *monster;
if (!(monster = malloc(sizeof (*monster)))) {
perror("malloc");
exit(1);
} else {
init_monster(monster);
}
}
}

static void init_monster(npc_t *m) {
int charact = rand()%3;

if (charact == 0)
m->characteristics = 0x00000000;
else if (charact == 1)
m->characteristics = NPC_SMART;
else if (charact == 2)
m->characteristics = NPC_TELEPATH;

m->pc_last_known_position = {0, 0};
m->npc_position = {0, 0};
m->speed = rand() % 15 + 6;
m->turn = 0;
}

这是我的位置结构:

typedef struct position_t {
int x, y;
} position;

为什么这不起作用?我明白了:

npc.c:22:1: error: expected identifier or ‘(’ before ‘}’ token
}
^
npc.c: In function ‘init_monster’:
npc.c:35:30: error: expected expression before ‘{’ token
m->pc_last_known_position = {0,0};
^
npc.c:37:20: error: expected expression before ‘{’ token
m->npc_position = {0,0};
^
make: *** [npc.o] Error 1

正确的做法是什么?我应该使用 malloc 为结构在内存中腾出一些空间,对吗?但是,我是否也不需要为 position 执行此操作并为 NPC 提供指向 position 结构的指针?

最佳答案

虽然您不能那样使用初始化列表,但您可以这样使用 string.h header 中的 memset() 函数

memset(&(m->pc_last_known_position), 0, sizeof(m->pc_last_known_position));
memset(&(m->npc_position), 0, sizeof(m->pc_last_known_position));

关于c - 使用 malloc 初始化结构内部的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28664368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com