【发布时间】:2014-05-23 11:24:02
【问题描述】:
我对结构更加困惑。复制结构的方法有很多种。
struct complex
{
int real;
int imaginary;
};
Assume c1 is complex structure variable. c2 is pointer of complex type.
一种方法是将一个结构简单地分配给另一个结构。 c1=*c2。
我尝试过这个。它工作正常。但是 c2 将给出结构复杂的第一个元素的地址。那么整个结构将如何被复制呢?我对指针更困惑吗?
另一种方法是使用memcpymemcpy(&c1,c2,sizeof(struct complex))。
我的疑问在于成员结构复制。
memcpy(&c1.real, &c2->real, sizeof(struct complex))
我读到上述方法并不安全。因为如果我们更改结构成员的顺序,它将不起作用。没人解释怎么不安全?它让我感到困惑,因为这两个变量都是相同的结构,我正在指定我想要复制的内容[在这种情况下是真实的]。那为什么不安全呢?谁能解释一下?
【问题讨论】:
-
memcpy(&c1.real, &c2->real, sizeof(struct complex))- 你应该看到这是非常有问题的。问题不在于这不安全,这完全是错误的。复制多少以及复制到哪里?它可能会起作用,但它不必以任何方式起作用。我也不明白你真正问的是什么。 -
在你复制成员明智结构复制的行中......你正在复制成员
&c1.real但给出结构的大小......只需给出变量的大小.....然后试试看..!!! -
使用 memcpy 对于您正在做的事情是不必要的。只需使用作业。第二个 memcpy 不好,因为您试图复制 sizeof(struct complex) 字节,而它应该是 sizeof(int) 字节。如果你把 real 放在 complex 之后,它将开始写入结构内存的末尾,因为它仍然会写入(大概)8 个字节。您现在所拥有的将复制整个结构,但这是一种晦涩难懂的方式。如果你对除第一个成员之外的任何其他成员执行此操作,memcpy 将在结构之外编写(或至少尝试)一些内容