函数原型:char *strtok(char *str, const char *delim);
功能:分解字符串为一组字符串。
参数:str为要分解的字符串;delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)
说明:strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回指向被分割出片段的指针。
函数原型:char *strlok_r(char *str, const char *delim, char **saveptr);
功能:分解字符串为一组字符串。
参数:str为要分解的字符串;delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)
说明:strtok_r函数是strtok函数的可重入版本。str为要分解的字符串,delim为分隔符字符串。 char ** saveptr参数是一个指向char *的指针变量,用来在strtok_r内部保存切分时的上下文,以应对连续调用分解相同源字符串。
第一次调用strtok_r时,str参数必须指向待提取的字符串,saveptr参数的值可以忽略。连续调用时,str赋值为NULL,saveptr为上次调用后返回的值,不要修改。一系列不同的字符串可能会同时连续调用strtok_r进行提取,要为不同的调用传递不同的saveptr参数。
strtok_r实际上就是将strtok内部隐式保存的this指针,以参数的形式与函数外部进行交互。由调用者进行传递、保存甚至是修改。需要调用者在连续切分相同源字符串时,除了将str参数赋值为NULL,还要传递上次切分时保存下的saveptr。