想通过 二维数组 去不重复的存储 设备扫描到的 UUID(16位)。

问题遇到的现象和发生背景

二维数组范例:
UUID_LIST[NUM][16]; //NUM是扫描到的UUID的个数
int uuid_list_index = 0; ///UUID List Index

问题相关代码,请勿粘贴截图
    if (uuid_list_index >= NUM)
    {
       uuid_list_index = 0;
       break;
    }

     if (uuid_list_index <NUM)
    {
          for (int n = 0; n < NUM; n++)
        {
            if (memcmp(uuid_list_array[n], p_dev_info.dev_uuid, MESH_DEV_UUID_LEN) == 0)
            {
            break;
            }
            else
            {
                uuid_list_index = uuid_list_index + 1;
                memcpy(uuid_list_array[uuid_list_index], p_dev_info.dev_uuid, MESH_DEV_UUID_LEN);
            }
        }
运行结果及报错内容

无法实现UUID的 不重复 的存储。

我的解答思路和尝试过的方法
我想要达到的结果

每扫描到一个UUID,会先在二维数组里遍历是否存在。 存在的话,不做任何操作,不存在的话,将UUID存储到二维数组中(尾插)。

17行为啥先加1呢?加1的话,uuid_list_index 就有可能为NUM,memcpy复制时就越界了。
把 17和18行交换一下吧
另外第9行也不需要比较到NUM-1啊,只需要for (int n = 0; n < uuid_list_index-1; n++)就可以了

代码不全没看出来问题,而且你说不能是如何鉴定出来,不知道。 uuid_list_index = 0;感觉是没有必要的,就这些代码来看它代表着list中存在的元素个数。这个判断 if (uuid_list_index <NUM)是多余的。

///UUID List
uint8_t uuid_list_array[DEVICE_NUM][MESH_DEV_UUID_LEN] = {0}; 
///UUID List Index
int uuid_list_index = 0;
/*
uint8_t dev_uuid[MESH_DEV_UUID_LEN];
//p_dev_info.dev_uuid 为扫描到的UUID
*/

//UUID存储到二维数组的 算法,如下

do
    {
       if (uuid_list_index >= DEVICE_NUM)
        {
           os_printf(LM_CMD, LL_INFO," uuid_list_index >=%d   Node Number =%d \n", DEVICE_NUM,uuid_list_index+1);

           for (int i = 0; i < DEVICE_NUM; i++)
           {
           os_printf(LM_CMD, LL_INFO,"--- uuid_list_array[%d]= ",i);
           for (int j = 0; j < MESH_DEV_UUID_LEN; j++)
           {
               os_printf(LM_CMD, LL_INFO,"%02X ",uuid_list_array[i][j]);
           }
           os_printf(LM_CMD, LL_INFO,"--- \n");
           }

           uuid_list_index = 0;
           break;
        }

        memcpy(uuid_list_array[uuid_list_index], p_dev_info.dev_uuid, MESH_DEV_UUID_LEN);

       os_printf(LM_CMD, LL_INFO, " uuid_list_array[%d]: ",uuid_list_index);
       for(int j = 0; j < MESH_DEV_UUID_LEN; j++)
       {os_printf(LM_CMD, LL_INFO, "%02X ",uuid_list_array[uuid_list_index][j]);}
       os_printf(LM_CMD, LL_INFO, "\n");

        uuid_list_index = uuid_list_index + 1;

        if (uuid_list_index < DEVICE_NUM)
        {
            for (int n = 0; n < uuid_list_index; n++)
            {
                if (memcmp(uuid_list_array[n], p_dev_info.dev_uuid, MESH_DEV_UUID_LEN) == 0)
                {
                break;
                }
                else
                {
                    memcpy(uuid_list_array[uuid_list_index], p_dev_info.dev_uuid, MESH_DEV_UUID_LEN);

                    os_printf(LM_CMD, LL_INFO, " uuid_list_array[%d]: ",uuid_list_index);
                    for(int j = 0; j < MESH_DEV_UUID_LEN; j++)
                    {os_printf(LM_CMD, LL_INFO, "%02X ",uuid_list_array[uuid_list_index][j]);}
                    os_printf(LM_CMD, LL_INFO, "\n");

//                    uuid_list_index = uuid_list_index + 1;
                }
            }
        }
    } while (0);

运行结果:

img


UUID重复存储,没有达到我想要的效果。。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632