为什么我们在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()。
strtok 是C库的一部分,它的作用是将C null分隔的字符串拆分为由您指定的任何分隔符分隔的标记.
第一次调用strtok必须将C字符串传递给tokenize,后续调用必须指定NULL为第一个参数,它告诉函数继续对您首先传入的字符串进行标记.
函数的返回值返回一个C字符串,该字符串是检索到的当前标记.所以先调用 - >第一个令牌,第二个调用(指定NULL) - >第二个令牌,依此类推.
如果没有要检索的标记,则strtok返回NULL,表示该字符串已完全标记化.
以下是参考资料,例如:http://www.cplusplus.com/reference/cstring/strtok/