民间, 我不知道我是否在问愚蠢的问题。但是试图找出我的问题,但没有做到。
我的结构是
typedef struct {
uint16 nwkaddr;
uint8 extaddr[8];
}device_t;
typedef struct node{
device_t list;
struct node *link;
}address_list;
来自UART的数据是 1010,23CD1234,CD32454F,12F439AF,! 。我需要解析并存储mac列表。
while(data[j] != '!')
{
if(data[i] == ',')
{
i = i+1;
memset(addr, 0, 9);
memcpy(addr, &data[i], 8);
// addr[8] = '\0';
if(addr != 0)
{
insert_MacList(addr);
}
}
i = i+8;
j = i+1;
}
创建的列表是
void insert_MacList(uint8 *mac)
{
address_list *curr, *temp;
//curr = (address_list*)malloc(sizeof(address_list));
curr = osal_mem_alloc(sizeof(address_list));
strcpy((char*)curr->list.extaddr, (char const*)mac);
temp = head;
if(head == NULL)
{
head = curr;
head->link = NULL;
}
else
{
while(temp->link !=NULL)
{
temp = temp->link;
}
curr->link = NULL;
temp->link = curr;
}
}
我正在尝试打印所有地址,但我无法获得23CD1234。但在那之后我得到了正确的答案。
void check_inlist(void)
{
address_list *temp;
temp = head;
while(temp != NULL)
{
/*print data and send to UART*/
temp = temp->link;
}
}
为什么head正在改变为第二个元素,是23值创造了一些问题?所以有些人可以帮助我
答案 0 :(得分:0)
您正在使用strcpy
复制非空终止的数据!
您可以这样更改:
strncpy((char*)curr->list.extaddr, (char const*)mac, sizeof curr->list.extaddr); // strncpy won't write past the end of the array
答案 1 :(得分:0)
你有
typedef struct {
uint16 nwkaddr;
uint8 extaddr[8];
}device_t;
但是在insert_MacList()
你打电话
strcpy((char*)curr->list.extaddr, (char const*)mac);
复制9个字节(8个值+终止'\0'
)。这可能会导致问题。