相关疑难解决方法(0)

将一个结构复制到另一个结构

我知道我可以按成员复制结构成员,而不是我可以在结构上进行复制memcpy吗?

这样做是否明智?

在我的结构中,我有一个字符串也作为成员,我必须复制到具有相同成员的另一个结构.我怎么做?

c struct copy

53
推荐指数
5
解决办法
15万
查看次数

将结构变量分配给自身(通过指针取消引用)定义的行为吗?

如果两个指针指向同一个结构变量,是否定义了将一个取消引用的指针分配给另一个指针的行为?

struct Struct {
    int member;
};

int main() {
    struct Struct s, *p1, *p2;
    s.member = 1234;
    p1 = p2 = &s;
    *p1 = *p2; // is this allowed?
}
Run Code Online (Sandbox Code Playgroud)

我主要问这个问题,因为在这篇 SO 帖子这篇 SO 帖子中,许多答案表明 struct 赋值或多或少相当于memcpy,并且某些编译器甚至生成memcpy对赋值语句的调用。然而,memcpy当内存位置重叠时, 就没有被定义,这就引出了一个问题:它是为赋值而定义的吗?

这似乎符合预期,但我想知道 C 标准是否对此有任何规定。是否需要添加一个简单的检查

if (p1 != p2) *p1 = *p2;
Run Code Online (Sandbox Code Playgroud)

或使用memmove


仅供参考,这是我在 C 中实现自己的插槽映射(如此处所述)时出现的。容器中删除元素时,数组末尾的元素将被复制到删除的位置以保持所有内容连续。在被删除的元素位于数组末尾的情况下,它将被复制到自身(不是非常重要,因为该元素被认为是被删除的,但无论如何让我很好奇)。

c struct pointers memcpy

4
推荐指数
1
解决办法
102
查看次数

什么是memcpy和C中的等号之间的效率差异?

我经常使用memcpy来复制C/C++中的结构.我看到有人使用等号在C/C++中直接复制struct.例如:

struct A { char* name; int value; };
struct B { struct A happy[10]; }; 

struct A a1, a2;
struct B b1, b2;
memcpy(&a1, &a2, sizeof(struct A));
b1 = b2;
Run Code Online (Sandbox Code Playgroud)

memcpy和等号之间的效率差异是什么?

c memcpy

2
推荐指数
1
解决办法
733
查看次数

标签 统计

c ×3

memcpy ×2

struct ×2

copy ×1

pointers ×1