如何在C中创建一个指向typedef结构体中缓冲区的指针?

qv7cva1a  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(131)

当我尝试用一个指向字符缓冲区的指针初始化一个typedef结构时,我得到了一个incompatible-pointer-types错误。该结构看起来像这样:

typedef struct otCryptoKey
{
    const uint8_t *mKey;       ///< Pointer to the buffer containing key. NULL indicates to use `mKeyRef`.
    uint16_t       mKeyLength; ///< The key length in bytes (applicable when `mKey` is not NULL).
    uint32_t       mKeyRef;    ///< The PSA key ref (requires `mKey` to be NULL).
} otCryptoKey;

这是我尝试过的,我也尝试过用结构体中的所有参数进行初始化。

uint8_t mKey[16] = "1234567891012131";
    uint8_t *mKeyPointer = mKey;

    otCryptoKey *aKey = {mKeyPointer};

有人能找出为什么我得到这个错误吗?

woobm2wo

woobm2wo1#

您正在创建指向otCryptoKey的指针,并试图用指向uint8_t的指针对其进行初始化。这些类型不兼容。
您需要创建一个otCryptoKey对象,并用该指针初始化mKey成员。

otCryptoKey aKey = {mKey, sizeof mKey, 0};
kqhtkvqz

kqhtkvqz2#

该语法初始化的是结构,而不是指向结构的指针。
您应该改为:otCryptoKey aKey = {mKeyPointer};
或者更好的方法是,使用命名字段并放弃中间变量:otCryptoKey aKey = { .mKey = mKey };

相关问题