strtok的疑问与解惑

关于strtok

char* strtok(char *str , char *delimeters)

第一次调用,传入原始字符串,返回分割的第一个结果;获取后续结果,不再需要原始字符串,而只传入NULL。

有如下疑问:

1.  函数怎么记住函数外部的状态(原始被分割串的下一个头位置)

2. 内部怎么分割的


带着这个问题,看了两篇博文:

1. 关于函数strtok和strtok_r的使用要点和实现原理(一)

2. 关于函数strtok和strtok_r的使用要点和实现原理(二)

大有收获!

回答回答疑问:

1. 使用了静态变量 static 。关于静态变量,见维基本科

    即是作用域在该函数内,但生命周期与程序相同。定义初始化只在第一次有效(故多次调用能够保持上次状态)。

2. 很简单,遍历字符串,如果找到给定分割符串中任意一个,就将该位置置为'\0',返回该段头指针,把下一段的头指针赋值给上面提到的静态变量,为下次找做准备。故使用strtok是要改变原始串内容的!

  还有一种特殊情况,就是如果字符串一开始就是限定符串中的一个,那么如果分割的话,返回的就是NULL指针(把限定符填充为'\0'后该段不在含有任何字符),所以程序的逻辑是直接跳过该字符,直到该段至少包含一个内容时为止。


详细信息请看上述列出的两篇博文。再次对该作者表示感谢,写得很认真详细。

你可能感兴趣的:(strtok的疑问与解惑)