我正在尝试使用2个不同的定界符来分割令牌,但是在同一字符串上两次使用strtok()会给我带来意想不到的结果。 在第一次strtok之后,我想拥有:
0
1
2
3
4;5;6;7
8
9
10
第二次启动后:
0
1
2
3
4
5
6
7
8
9
10
这是我的代码:
char *token;
x[0] = {0};
char str[1024] = "0,1,2,3,4;5;6;7,8,9,10;
token = strtok( str, ",');
printf("token is %s\n", token);
//Second 'split'
char *p = strtok (token, ';');
while (p != NULL)
{
array[z++] = p;
p = strtok (NULL, seps2);
}
for (int i = 0; i < count + 1; ++i)
printf("%s\n", array[i]);
答案 0 :(得分:2)
strtok()
的第二个参数是字符串每个字符,当标记该字符串时,它被视为定界符。
因此您可以像
那样将strtok()
的呼叫设为strtok(str, ",;")
char s[]="0,1,2,3,4;5;6;7,8,9,10";
for(char *tk = strtok(s, ",;"); tk!=NULL; tk=strtok(NULL, ",;"))
{
printf("%s\n", tk);
}
在这种情况下的输出将是
0
1
2
3
4
5
6
7
8
9
10
请注意,strtok()
会修改原始字符串。
答案 1 :(得分:0)
如果您使用的是POSIX系统,请尝试strtok_r()
(see ideone)。
否则(see ideone),您需要保存strtok(XXX, ",")
中的结果,并将strtok(XXX, ";")
分别应用于每个结果。