源代码如下:
void GetAllData()
{
char *split = ";";
char *p = pvPortMalloc(20);
memset(p,0,20);
FlashRead(CORE_DATAADDR_S1,(uint8_t *)CoreDataBuff_S1,256);
/* 获取设备号 */
p = strtok(CoreDataBuff_S1,split) ;
sscanf(p,"%s", CoreParameter.EquipID);
/* 获取硬件版本号 */
memset(p,0,20);
//p = NULL;
p = strtok(NULL,split) ;
sscanf(p,"%s", CoreParameter.HVersion);
/* 获取软件版本号 */
memset(p,0,20);
p = strtok(NULL,split) ;
sscanf(p,"%s", CoreParameter.SVersion);
}
不理解的地方:这里只能得到第一个参数的值,剩下的两个值为空,原因是使用了memset(p,0,20);我把p清空有影响什么吗?为什么换成 p = NULL,就能够得到剩余两个参数的值,开始我想的是,p在第一个分割之后可能记录了下一次分割的位置,但是使用p = NULL都把指向改变了还是能够得到剩余参数的值,这是为什么呢?
|