工作中经常遇到需要将字符串分解的情况,一般来说使用strtok就能满足需求了,但是如果想要同时分解多个字符串,使用strtok就会出问题,示例代码图下
char pointname[400] = {0};
char pointvalue[100] = {0};
sprintf(pointname, "1 2 3 4 5 6 7");
sprintf(pointvalue, "a b c d e f g");
char *name = NULL;
char *value = NULL;
name = strtok(pointname, " ");
value = strtok(pointvalue, " ");
while(name != NULL && value != NULL)
{
printf("name=%s value=%s\n",name,value);
name = strtok(NULL, " ");
value = strtok(NULL, " ");
}
运行结果如下,原因在于strtok函数内部的指针指向了第二个字符串。
name=1 value=a
name=b value=c
name=d value=e
name=f value=g
这种情况下,可以使用strtok_r函数来进行分割
char pointname[400] = {0};
char pointvalue[100] = {0};
sprintf(pointname, "1 2 3 4 5 6 7");
sprintf(pointvalue, "a b c d e f g");
char *name = NULL;
char *value = NULL;
char *save_name = NULL;
char *save_value = NULL;
name = strtok_r(pointname, " ", &save_name);
value = strtok_r(pointvalue, " ", &save_value);
while(name != NULL && value != NULL)
{
printf("name=%s value=%s\n", name, value);
name = strtok_r(NULL, " ", &save_name);
value = strtok_r(NULL, " ", &save_value);
}
结果如下
name=1 value=a
name=2 value=b
name=3 value=c
name=4 value=d
name=5 value=e
name=6 value=f
name=7 value=g