gpt4 book ai didi

c++ - 将结构的动态数组复制到另一个结构

转载 作者:行者123 更新时间:2023-11-30 01:12:03 25 4
gpt4 key购买 nike

我有一个这样定义的结构:

struct Queries {

uint64_t Id;
uint64_t from;
uint32_t counter; // total queries
char queries[];
};

我想做的是创建一个新的结构“对象”,并将现有结构的值复制到这个新对象。

我尝试过的

void function(Queries* oldq){

Queries* q = new Queries();

// values are copied correctly
q->Id = oldq->Id;
q->from = oldq->from;
q->counter = oldq->counter;

// copy is not correct
for (unsinged i = 0; i < oldq->counter; i++)
q->queries[i] = oldq->queries[i];

}

1)我也试过:

q = oldq;

但这行不通。

2) 我想我必须为查询数组分配 counter * sizeof(char) 空间,但由于结构的成员不是指针,我不知道该怎么做。

最佳答案

这里你正在处理一个 C-style flexible array member .它不是有效的 C++ 代码,但自 C99 以来它是有效的 C(有关详细信息,请参见链接)。要使用这样的结构,您需要分配 sizeof(Queries) + counter 字节,其中数组字段将使用 counter 字节部分。 (注意:如果您有 char 以外的数组字段,则必须相应地相乘。)

现在,您不能在这里使用 C++ 功能,例如复制构造函数,因为编译器不知道您的结构的大小。相反,您必须使用纯 C 方法:

Queries *cloneQueries(Queries *oldQ)
{
size_t sizeQ = sizeof(Queries) + oldQ->counter;
Queries *newQ = (Queries*)malloc(sizeQ);
memcpy(newQ, oldQ, sizeQ);
return newQ;
}

关于c++ - 将结构的动态数组复制到另一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680992/

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