说我有三架C风格的字符串,char buf_1[1024],char buf_2[1024],和char buf_3[1024].我想对它们进行标记化,并使用所有三个中的第一个标记执行操作,然后对所有三个中的第二个标记执行相同操作等.显然,strtok每次我想要一个新标记时,我可以从头开始调用并循环它们.或者,预先处理所有令牌,将它们分成三个阵列并从那里开始,但我想要一个更清洁的解决方案,如果有的话.
Dav*_*own 10
听起来你想要的是可重入版本strtok,strtok_r它使用第三个参数来保存它在字符串中的位置而不是函数中的静态变量.
这是一些示例骨架代码:
char buf_1[1024], buf_2[1024], buf_3[1024];
char *save_ptr1, *save_ptr2, *save_ptr3;
char *token1, *token2, *token3;
// Populate buf_1, buf_2, and buf_3
// get the initial tokens
token1 = strtok_r(buf_1, " ", &save_ptr1);
token2 = strtok_r(buf_2, " ", &save_ptr2);
token3 = strtok_r(buf_3, " ", &save_ptr3);
while(token1 && token2 && token3) {
// do stuff with tokens
// get next tokens
token1 = strtok_r(NULL, " ", &save_ptr1);
token2 = strtok_r(NULL, " ", &save_ptr2);
token3 = strtok_r(NULL, " ", &save_ptr3);
}
Run Code Online (Sandbox Code Playgroud)