strtok_r( )函数用于分割
字符串。strtok_r是linux平台下的strtok函数的
线程安全版。
windows的
string.h中并不包含它,windows下的对应安全函数为strtok_s。
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。
调用strtok_r的代码比调用strtok的代码多了两个指针,outer_ptr和inner_ptr。outer_ptr用于标记每个人的提取位置,即外循环;inner_ptr用于标记每个人内部每项信息的提取位置,即内循环。具体过程如下: