我正在尝试交换结构中的两个条目。
这是结构:
struct hdr {
uint8_t ether_dhost[6];
uint8_t ether_shost[6];
}
当我尝试将这些值保存在临时数组中时,我在这一行收到此错误:
uint8_t original_dhost[6];
original_dhost = ethernet_hdr->ether_dhost;
incompatible types when assigning to type
'uint8_t[6]'
from type 'uint8_t *'
所以我尝试使用指针而不是数组:
uint8_t *original_dhost;
然后我没有得到任何错误,但是当我尝试分配给 ethernet_hdr->ether_dhost
时,我得到这个错误:
ethernet_hdr->ether_shost = original_dhost;
incompatible types when assigning to type ‘uint8_t[6]’ from type ‘uint8_t *’
如何避免上面的第一个错误?具体来说,当我将它声明为数组时,为什么编译器说该字段是 'uint8_t *'
?
最佳答案
ether_dhost
是一个数组。您不能使用简单的赋值语句复制到它或从它复制。
您的第一个错误是因为 ethernet_hdr->ether_dhost
解析为第一个元素的地址(uint8_t
指针),但您不能将其值分配给新数组。
您需要使用 memcpy(或循环)来复制所有元素:
uint8_t original_dhost[6];
memcpy(original_dhost,ethernet_hdr->ether_dhost,sizeof(original_dhost));
关于c - 结构体入口声明了一个数组类型的字段,但编译器说它是一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19163978/