#include<bits/stdc++.h>
using namespace std;
char str[] = "you-r-a";
char *temp;
char reg[] = "-";
int main(){
temp = strtok(str,reg);
while(temp){
puts(temp);
temp = strtok(NULL,reg);
}
}
这个函数的用途是把一个字符串按照seps中指定的符号进行分割,就如同perl中的split()函数。但是,为什么strtok(NULL,seps)中的第一个参数是NULL呢?太奇怪了。
查了查资料,发现玄机在这里:这个函数strtok(OriginalString,Seps)涉及到两个指针。
第一个指针pointer_a用来指向函数返回的字符串,这个字符串是被原字符串OriginalString被seps中的字符截断后的第一个字符串。
第二个指针pointer_b用来指向OriginalString中,匹配截断字串seps的位置。
这样,在循环体之内进行第二次函数调用时只要把strtok()的第一个参数设置为NULL,就可以直接从pointer_b位置开始进行查找匹配了。
可以理解为NULL让strtok继续向后匹配