gpt4 book ai didi

C 结构体分配给结构体数组

转载 作者:行者123 更新时间:2023-11-30 17:50:34 26 4
gpt4 key购买 nike

我正在尝试将结构添加到结构数组中,但是收到错误:解析问题:预期表达式。下面是我的代码:

main.c:

#include <stdio.h>

#include "map.h"

int main(int argc, const char * argv[]) {
map(map_ss, char*, char*);

map_init(map_ss, map);

printf("Map has been initilized\n\n");

// The error is over the next 3 lines
add_pair(map, "first", "1");
add_pair(map, "second", "2");
add_pair(map, "third", "3");

print_map(map);

map_free(map);

printf("\n\nMap has been freed.");

return 0;
}

map.h

#ifndef Data_Structures_map_h
#define Data_Structures_map_h

#include <stdio.h>
#include <stdlib.h>

#define pair(key_t, value_t) \
typedef struct pair { \
key_t key; \
value_t value; \
} pair

#define map(name, key_t, value_t) \
pair(key_t, value_t); \
typedef struct name { \
pair* pairs; \
int capacity; \
int size; \
} name

#define map_init(name, var_name) \
name* var_name = malloc(sizeof(var_name)); \
var_name->pairs = malloc(10 * sizeof(var_name->pairs)); \
var_name->capacity = 10; \
var_name->size = 0

#define map_free(var_name) \
free(var_name)

#define add_pair(var_name, key, value) \
if (var_name->size == var_name->capacity) \
var_name->pairs = realloc(var_name->pairs, 2 * var_name->capacity); \
var_name->pairs[var_name->size++] = { .key = key, .value = value; } \ // error in here

#define print_map(var_name) \
printf("Contents of the map:\n"); \
int i; \
for (i = 0; i < var_name->size; i++) { \
printf("Item #%i: Key:%p -> Value:%p\n", \
(i+1), var_name->pairs[i].key, var_name->pairs[i].value); \
} \

#endif /* Data_Structures_map_h */

我尝试过,var_name->pairs[var_name->size++] = { key, value; }配对 p; p.key = 键; p.值=值; var_name->pairs[var_name->size++] = p;,但仍然不起作用。这里有什么问题,看起来应该可以。

此外,是否有一个占位符可以向其中写入任何内容,我在维基百科上读到 %p 代表 void*,所以我认为它可以工作。

我在 Mac 上使用 Xcode。

最佳答案

试试这个

#define add_pair(var_name, _key, _value)                                    \
if (var_name->size == var_name->capacity) \
var_name->pairs = realloc(var_name->pairs, 2 * var_name->capacity); \
var_name->pairs[var_name->size].key = _key; \
var_name->pairs[var_name->size++].value = _value

关于C 结构体分配给结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187385/

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