二维数组范例:
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);
运行结果: