在for循环中使用strtok

时间:2013-06-27 23:50:49

标签: c

循环使用的字符串str:

for (tok = strtok(str, ";"); tok && *tok; tok = strtok(NULL, ";"))  
{  
   //do stuff  
}

我想了解这个循环是如何工作的。在我看来:

(1) tok = strtok(str, ";"); //initialization of tok with the first token in str    
(2) tok = strtok(NULL, ";"); // go to the next token in str? how does this work? 
(3) tok && *tok;  //this stops the loop when tok =NULL or *tok=NULL 

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

以下是strtok实施示例:http://bxr.su/o/lib/libc/string/strtok.c#strtok

正如您在代码中看到的那样,它在内部使用了一个静态字符指针(几乎我见过的每个版本都存储了一个指针,无论是作为全局变量还是静态变量,如上例所示)。此版本调用可重入strtok_r(如果传递NULL,则行if (s == NULL && (s = *last) == NULL) 的副作用是使用最后一个指针)

答案 1 :(得分:1)

  

(2)tok = strtok(NULL,“;”); //转到str中的下一个标记?这是怎么回事?

这正是strtok()的工作原理。通过发送NULL作为第一个参数,您发信号通知strtok()应该继续使用在上次调用期间发送给它的字符串。如果您想知道确切的实现细节,则需要查看strtok()的源代码。很可能它使用静态局部变量。

答案 2 :(得分:-1)

如果您阅读manpages strtok,则说明

  

strtok()函数将字符串解析为一系列标记。上   第一次调用strtok()时应该指定要解析的字符串   在str。在每个应该解析相同字符串的后续调用中,   str应为NULL。

答案 3 :(得分:-1)

您可以在此处找到有关strtok的更多信息。它有一些如何使用它的例子。

从链接引用str中的strtok(str, delim)参数:

  

请注意,此字符串的内容已被修改并分解为较小的字符串(标记)。   或者,可以指定空指针,在这种情况下,函数继续扫描先前成功调用函数的位置。

你的3个猜测是正确的。