【发布时间】:2021-11-22 09:44:42
【问题描述】:
我有一个关于在结构中为给定 char 指针分配内存的问题。以下 typedef bson_value_t 由 API 提供,我想在我自己的 typedef ObjectInfo 中使用它,如我的代码所示:
typedef struct _bson_value_t {
bson_type_t value_type;
union {
int64_t v_int64;
int32_t v_int32;
int8_t v_int8;
double v_double;
struct {
uint32_t len;
char *str;
} v_utf8;
} value;
} bson_value_t;
typedef struct _ObjectInfo {
char key[100];
bson_value_t value;
} ObjectInfo;
我还有其他包含数百个 ObjectInfo 类型的数据包,但都简单地初始化为:
typedef _DataPackage {
ObjectInfo single;
ObjectInfo multiple[100];
...
} Datapackage;
所以它们还没有包含任何有用的数据。我想使用 strcpy 将字符串放在 char *str 指向的位置。但据我所知,这是行不通的,因为 *str 指向的地方没有分配的内存,对吧? 我的问题是,如何在不更改给定 typedef bson_value_t 的情况下实现这一点?我需要为我初始化的任何一个 bson_value_t 分配内存吗?
strcpy(DataPackage.single.value.value.v_utf8.str, "test");
这不起作用,除非我将其更改为:
strcpy(&DataPackage.single.value.value.v_utf8.str, "test");
但这给了我编译器警告。
【问题讨论】:
标签: c string struct initialization allocation