传递给它的每个参数到底是什么,它返回什么?
它到底有多好于普通的strtok
请给我最简单最基本的解释。

最佳答案

这在Appendix K (bounds checking interfaces)标准的ISO C11中有详细说明。该标准的可选部分提供了在标准的核心部分中提供的已经存在的功能的“更安全”(A)版本。
原型是:

char *strtok_s (
    char * restrict        s1,
    rsize_t * restrict     s1max,
    const char * restrict  s2,
    char ** restrict       ptr);

作为安全功能的一部分检查的运行时约束包括:
指针s1maxs2ptr都必须为非空。
如果s1是空指针,则*ptr不能是空指针。
*s1max的值必须小于或等于RSIZE_MAX
找到的令牌的结尾必须出现在第一个调用的*s1max的第一个s1字符内
找到的标记的结尾必须出现在随后调用时继续搜索的位置的前*s1max个字符内。
安全方面是,如果违反了这些约束中的任何一个,则在s1s2上不会发生间接寻址,也不会通过ptr存储任何值。
除了这些额外的检查,它的工作方式与标准的strtok函数基本相同,返回s1中由s2中的分隔符组分隔的标记。我认为使用ptr使其线程安全,因为它使用用户提供的非静态状态(b)。
(a)引用,因为如果你知道如何正确使用标准的大部分内容,那么它们已经是安全的了:-)
(b)仍然缺少的一件事是拥有空令牌的能力,例如:
field1||||field5

因为strtok_s(和原始的)将||||视为一个单独的分隔符,所以我们必须找到其他方法来实现这一点

关于c - 找不到strtok_s()的文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23064672/

10-11 19:29