为什么我们在strtok()中使用NULL?

use*_*999 3 c null strtok

为什么我们在strok()函数中使用null ?

while(h!=NULL)
{
   h=strtok(NULL,delim);  
   if(hold!=NULL) 
      printf("%s",hold);    
}
Run Code Online (Sandbox Code Playgroud)

当*h指向字符串时,该程序会执行什么操作?

小智 13

strtok()将指针存储在 您上次离开的静态变量中,因此在第二次调用时,当我们传递 null 时,strtok()从静态变量中获取指针。

如果您提供相同的字符串 name ,它将再次从头开始。

此外,strtok() 是破坏性的,即它会更改原始字符串。所以请确保您始终拥有一份原始副本。

使用 strtok() 的另一个问题是,由于它将地址存储在静态变量中,因此在多线程编程中多次调用 strtok() 会导致错误。为此使用strtok_r()


Ban*_*nex 8

strtok 是C库的一部分,它的作用是将C null分隔的字符串拆分为由您指定的任何分隔符分隔的标记.

第一次调用strtok必须将C字符串传递给tokenize,后续调用必须指定NULL为第一个参数,它告诉函数继续对您首先传入的字符串进行标记.

函数的返回值返回一个C字符串,该字符串是检索到的当前标记.所以先调用 - >第一个令牌,第二个调用(指定NULL) - >第二个令牌,依此类推.

如果没有要检索的标记,则strtok返回NULL,表示该字符串已完全标记化.

以下是参考资料,例如:http://www.cplusplus.com/reference/cstring/strtok/