strncpy在复制中间带有特殊字符(0x00)的字符串的时候,数据会开始缺失(认为已经复制到了这个字符串的结束位置),在0x00这个字符结束复制。复制这种字符最好使用MEMCPY复制,可以把数据全部复制过来。
memset(g_stMgr.u8NetWorkRcvData,'\0',RCV_DATA_MAX);
#if 1
MEMCPY(g_stMgr.u8NetWorkRcvData,g_stMgr.u8RcvData,g_stMgr.u32RcvDataLen);
#else
STRNCPY(g_stMgr.u8NetWorkRcvData,g_stMgr.u8RcvData, g_stMgr.u32RcvDataLen);//复制值会缺失(有特殊字符)
g_stMgr.u8NetWorkRcvData[g_stMgr.u32RcvDataLen]='\0';
#endif
/*
strncpy底层源码
*/
char *strncpy(char *dest, const char *src, size_t count)
{
char *tmp = dest; (1)
while (count) { (2)
if ((*tmp = *src) != 0) (3)//判断0x00,作为结束符(问题点)
src++; (4)
tmp++; (5)
count--; (6)
}
return dest; (7)
}