为什么strtok_r在'。'(普通字符)而不是','(逗号)处中断字符串?

时间:2020-05-29 11:55:06

标签: c strtok pic32

我正在为我的物联网模块使用pic32(C32编译器),32位体系结构,其中我正在从中接收数据 云,而不是提取到我的application.I正在使用此功能(这些是我可以提供的最大详细信息 提供)。成功提取前3个值,第3个值后我有一个DNS地址,例如 xyz.gcloudxyz.in,这是我在'。'处遇到strtok_r拆分字符串的问题。代替“,” 逗号。

这是我的src buff数据

  866758041000000,2,DV1,xyz.gcloudxyz.in,1111,2222,3333,DV2,xyz.gcloudxyz.in,1234,1231,1212,
void SERVERGetConf(ubyte *src,DEVICE_CONF *dst)
{
    unsigned char *src_ptr = src;
    unsigned char *token   = 0,*rest_ptr;
    unsigned char  matched_string[2] = ",";
    unsigned char cCount,AvlbConf = dst->avilable_config;
    
    token = (unsigned char *) strtok_r(src_ptr,",",&rest_ptr);
    
    if(!memcmp(token,modem.imei,sizeof(token)))
    {
        token                = strtok_r(NULL, matched_string,&rest_ptr);
        dst->avilable_config = atoi(token);
        for(cCount = 0;cCount < dst->avilable_config;cCount++)
          {
             DATA_SERVER_CONFIG t_conf = {0};
             
             token                = strtok_r(NULL, matched_string,&rest_ptr);
             memcpy(t_conf.data.id, token,sizeof(token));

             token                = strtok_r(NULL, matched_string,&rest_ptr); //**At this line split at '.'** 
             memcpy(t_conf.data.domain, token,sizeof(token));  

             token                = strtok_r(NULL, matched_string,&rest_ptr);
             memcpy(t_conf.data.port[0], token,sizeof(token));

             token                = strtok_r(NULL, matched_string,&rest_ptr);
             memcpy(t_conf.data.port[1], token,sizeof(token));

             token                = strtok_r(NULL, matched_string,&rest_ptr);
             memcpy(t_conf.data.port[2], token,sizeof(token));
             dst->device[cCount].data = t_conf.data;
          }
        modem.flag.sendingconfigration      = 0;
        conf.flags.bits.config_updated      = 1;   
    }
}

0 个答案:

没有答案