You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体数组成员数组复制问题:仅复制首元素如何解决?

问题分析与解决

你的代码只复制数组第一个元素的原因是:Temp_Buff[Other_Indx].Data作为数组名,在表达式中会隐式转换为指向数组第一个元素的指针,*解引用后仅获取该指针指向的第一个元素的值。这条语句本质上等价于:

Temp_Buff[Other_Indx].Data[0] = Msg_Buff[This_Indx].Data[0];

自然只会复制数组的第一个元素。

下面是三种可行的解决方法:

方法1:直接赋值整个结构体

C语言支持同类型结构体的直接赋值,这种方式会自动复制结构体内部的所有成员(包括数组的全部元素),代码最简洁:

Temp_Buff[Other_Indx] = Msg_Buff[This_Indx];

方法2:使用memcpy复制数组

如果只需要复制结构体中的数组部分而非整个结构体,可以用标准库的memcpy函数(需要包含<string.h>头文件):

#include <string.h>

// ...

memcpy(Temp_Buff[Other_Indx].Data, Msg_Buff[This_Indx].Data, sizeof(Temp_Buff[Other_Indx].Data));

这里用sizeof获取数组的总字节数,避免手动计算大小出错。

方法3:手动循环复制元素

如果需要对每个数组元素做额外处理,或者不想依赖标准库,可以手动遍历数组赋值:

for (int i = 0; i < DATA_SIZE; i++) {
    Temp_Buff[Other_Indx].Data[i] = Msg_Buff[This_Indx].Data[i];
}

内容的提问来源于stack exchange,提问作者nobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:04