每个参数到底传递给它的是什么,它返回了什么?
它究竟比常规strtok
更好吗?
请给我最简单和最基本的解释。
答案 0 :(得分:1)
on
标准的Appendix K (bounds checking interfaces)
详细说明了这一点。标准的这个可选部分提供了标准核心部分提供的“更安全”的(a)版本的现有功能。
原型是:
ISO C11
作为安全功能的一部分检查的运行时约束是:
char *strtok_s (
char * restrict s1,
rsize_t * restrict s1max,
const char * restrict s2,
char ** restrict ptr);
,s1max
和s2
必须全部为非空。ptr
是空指针,那么s1
一定不能。*ptr
的值必须小于或等于*s1max
。RSIZE_MAX
的第一个*s1max
字符内进行,以便第一次通话s1
字符内。安全方面是,如果违反了任何约束,*s1max
或s1
就不会发生间接,并且s2
不存储任何值。
除了这些额外的检查之外,它几乎与标准ptr
函数的作用相同,从strtok
返回由s1
中的分隔符组分隔的标记。我认为s2
的使用使其成为线程安全的,因为它使用了用户(b)提供的非静态状态。
(a)引用,因为如果你知道如何正确使用它们,那么标准的大多数部分已经安全: - )
(b) 仍然缺失的一件事是能够拥有空标记,例如:
ptr
由于field1||||field5
(和原始版)将strtok_s
视为单个分隔符,我们必须找到其他方法||||
: - )< / p>