c - 结构体入口声明了一个数组类型的字段,但编译器说它是一个指针

标签 c arrays struct

我正在尝试交换结构中的两个条目。

这是结构:

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/

相关文章:

c - 带有用户输入的结构数组内的 strstr char 数组

struct - 我可以限制结构的生命周期污染吗?

c - fscanf 和链表的 char *

c - 无法理解将 int 添加到 char 数组的验证语句的逻辑

c - 带引用参数的 printf

javascript - ionic 阵列过滤器不过滤

javascript - Jquery Ajax 到 PHP 脚本不读取数据

c - 在c中声明十六进制字符 'error: multi-character character constant'

c - 在链表中输入元素时进行迭代

c# - 从 .net 中的两个字符串数组中删除公共(public)字符串