gpt4 book ai didi

c - 什么是正确的数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:22 24 4
gpt4 key购买 nike

我正在学习嵌入式以太网编程,但我遇到了一段代码问题:

uint8   emacAddress[6U] =   {0x00U, 0x08U, 0xEEU, 0x03U, 0xA6U, 0x6CU};
uint32 emacPhyAddress = 0U;

int main(void)
{

hdkif_t hdkif01;
hdkif01.mac_addr[6] = emacAddress;

当我构建代码时,我收到关于最后一行的两个警告:

  1. 515-D 类型“uint8 *”的值不能分配给类型“uint8_t”的实体
  2. 177-D 下标超出范围

“hdkif_t”定义为:

typedef struct hdkif_struct {
/* MAC Address of the Module. */
uint8_t mac_addr[6];

/* emac base address */
uint32 emac_base;

/* emac controller base address */
volatile uint32 emac_ctrl_base;
volatile uint32 emac_ctrl_ram;

/* mdio base address */
volatile uint32 mdio_base;

/* phy parameters for this instance - for future use */
uint32 phy_addr;
boolean (*phy_autoneg)(uint32 param1, uint32 param2, uint16 param3);
boolean (*phy_partnerability)(uint32 param4, uint32 param5, uint16* param6);

/* The tx/rx channels for the interface */
txch_t txchptr;
rxch_t rxchptr;
}hdkif_t;

emacAddress 的正确数据类型是什么?为什么?

最佳答案

您的语句 hdkif01.mac_addr[6] = emacAddress; 正在将指向数组 emacAddress 的指针分配给 第七个元素>hdkif01.mac_addr。请记住,数组索引在 C 中是从零开始的。

由于hdkif01.mac_addruint8_t 的数组,因此第七个元素(A) 不存在,并且(B) 不够大,无法容纳指针。 (B) 是你错误的原因。

看起来您正在尝试复制一个数组。您有一些选项,从最手动到最少列出:

  1. 无循环地逐个元素复制:

    hdkif01.mac_addr[0] = emacAddress[0];
    hdkif01.mac_addr[1] = emacAddress[1];
    ...
    hdkif01.mac_addr[5] = emacAddress[5];
  2. 在循环中逐个元素复制:

    int i;
    ...
    for(i = 0; i < 6; i++)
    hdkif01.mac_addr[i] = emacAddress[i];
  3. 使用函数:

    #include <string.h>
    ...
    memcpy(hdkif01.mac_addr, emacAddress, sizeof(emacAddress));

关于c - 什么是正确的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com