结构体数组成员数组复制问题:仅复制首元素如何解决?
问题分析与解决
你的代码只复制数组第一个元素的原因是: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
相关产品推荐
相关产品推荐

