0

我正在尝试创建一个函数,它可以让我查看一个结构数组,并返回某个成员的值与输入匹配的那个。我找到了另一个线程,其中一个人有一个熟悉的问题,但它似乎对我不起作用。另一个线程可以在这里找到:Get a struct based on member values

我有结构:

typedef struct
{
    uint8_t register_id;
    uint8_t size; //In bytes
    char * name;
    char * access;
} Register;

我做了一个数组:

Register VN100_registers[4] = {
                                 {9,  16, "Attitude Quaternion",      "read only"},
                                {17, 12, "Magnetic measurements",     "read only"},
                                {18, 12, "Acceleration measurements", "read only"},
                                {19, 12, "Angular rate measurements", "read only"},

                                };

我使用这个功能:


static Register* GetVN100Register(const void* value_ptr, const size_t offset, const size_t field_size)
{
    for (uint32_t i = 0; i < N_ELEMS(VN100_registers); i++)
    {
        if (0 == memcmp(value_ptr, ((unsigned char*)&VN100_registers[i])+offset, field_size))
        {
            return &VN100_registers[i];
        }
    }
    return NULL;
}

它应该指向数组 VN100_registers 中的结构,其中成员值与函数输入匹配。

我初始化变量:

Register *test_ptr;
uint32_t value_to_find;

并调用函数:


  value_to_find = 18;

  test_ptr = GetVN100Register(&value_to_find, offsetof(Register, register_id), sizeof(value_to_find));

我应该指向数组的第三个结构,但是当我调试时,我得到了这个:

调试视图

4

0 回答 0