【问题标题】:using memcpy to copy a structure [duplicate]使用 memcpy 复制结构
【发布时间】:2026-02-04 06:20:07
【问题描述】:

可能的重复:
copying one structure to another
Copying one structure to another

       struct node
        {
           int n; 
           struct classifier keys[M-1];
           struct node *p[M];
        }*root=NULL;

我创建了类型为节点的新节点

        (*newnode)->keys[i]

我想将数据从结构 clsf_ptr 复制到键结构,该结构也属于同一类型 我可以这样做吗,我不想初始化每个成员函数

       memcpy((*newnode)->keys[i], clsf_ptr) 

【问题讨论】:

  • 尽管你接受了答案,为什么还要问这个问题 3 次来浪费我们的时间?
  • 我认为它是 4932012 的副本,但不是 4931123。这是关于将数组从一个结构复制到另一个结构。 4931123 是关于复制整个结构。 4932012 被错误地关闭为重复项(但再次问同样的问题只会让情况变得更糟。)
  • @stacker 常见问题解答说“好点”。 asir 实际上并没有问同样的问题 3 次,它们是不同的问题。

标签: c


【解决方案1】:

首先,应该是:

memcpy(&(newnode->keys[i]), &clsf_ptr, sizeof(struct classifier));

(假设newnode 是指向node 的指针,而clsf_ptr 是分类器`)。

另外,结构赋值在 C 中是合法的,所以你可以这样做:

newnode->keys[i] = clsf_ptr;

请注意,这两种方法都只执行shallow copy。因此,如果struct classifier 有指向内存的指针,则指针本身将被复制,而不是创建内存的新副本。

【讨论】:

  • Oli Charlesworth @newnode 是指向节点的指针,但 clsf_ptr 不是指向分类器的指针
  • @asir:那是什么?如果是其他的话,这不是一个很好的变量名!
  • @Oli Charlesworth :它只是分类器的一个实例,在具有实例 clsf_ptr 的结构分类器中,我已经初始化了一些数据,我必须将该数据复制到 (*newnode)->keys[i] 位置
  • @asir:好的,请参阅上面我的答案的更新!
  • @Oli Charlesworth:抱歉再次打扰您,一个月前刚刚在 C 语言中说明过编码,在其他情况下,我有节点实例,它不是指针,甚至不是分类器,所以这个语法正确的 memcpy((newnode->keys[i]),&clsf_ptr, sizeof(struct classifier)))
最近更新 更多