[英]copy Array to Member of Struct in C
我正在尝试无线传输数据。 我的有效负载结构如下所示:
typedef struct
{
uint8_t data[3];
} data_t
我的代码中也有一个数组:
uint8_t data_to_be_copied[3];
如果我尝试简单地互相分配,则会出现以下错误:
msg->data = data_to_be_copied;
从'uint8_t *'类型分配给'uint8_t [3]'类型时不兼容的类型
使用for循环,我的微控制器崩溃:
for (int i = 0; i < 3; i++) {
msg->data[i] = data_to_be_copied[i];
}
当我尝试使用memcpy时,也会发生同样的情况:
memcpy(msg->data, data_to_be_copied, 3);
我在这里想念什么?
谢谢你的帮助。
msg->data
是一个数组。
因此,它没有l值,因此无法更改。
这就是为什么您遇到上述第一个选项的编译错误的原因。
对于上面提到的第二个和第三个选项,在运行时会遇到内存访问冲突,这可能是因为msg
变量未初始化为指向有效的内存地址。
假设您在正确的位置声明了data_t* msg
,您仍然需要对其进行初始化:
data_t* msg = (data_t*)malloc(sizeof(data_t));
您还应确保在以后执行程序时free(msg)
。
顺便说一句,您尚未指定程序的整个结构,但是一个简单的data_t msg
实例就可以满足您的需要(在这种情况下,您无需使用malloc
和free
)。
并且在由@Shahbaz的评论中提到,如果你最终使用malloc
和free
,那么你需要确保你的平台(操作系统或BSP)支持动态内存分配(AKA 堆 )。
您有一些可能:
memcpy(msg-> data,data_to_be_copied,3);
或将data_to_be_copied更改为
data_t data_to_be_copied;
并分配整个内容:* msg = data_to_be_copied
或者,如果msg实际上有更多成员,则声明具有三个字符数组的结构作为其唯一成员。
如果崩溃,则很有可能味精为NULL或一些未初始化的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.