找不到strtok_s()的文档

时间:2014-04-14 15:55:44

标签: c strtok

每个参数到底传递给它的是什么,它返回了什么?

它究竟比常规strtok更好吗?

请给我最简单和最基本的解释。

1 个答案:

答案 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); s1maxs2必须全部为非空。
  • 如果ptr是空指针,那么s1一定不能。
  • *ptr的值必须小于或等于*s1max
  • 找到的令牌的结尾必须在RSIZE_MAX的第一个*s1max字符内进行,以便第一次通话
  • 找到的令牌的结尾必须出现在后续通话中搜索恢复的第一个s1字符内。

安全方面是,如果违反了任何约束,*s1maxs1就不会发生间接,并且s2不存储任何值。

除了这些额外的检查之外,它几乎与标准ptr函数的作用相同,从strtok返回由s1中的分隔符组分隔的标记。我认为s2的使用使其成为线程安全的,因为它使用了用户(b)提供的非静态状态。

(a)引用,因为如果你知道如何正确使用它们,那么标准的大多数部分已经安全: - )

(b) 仍然缺失的一件事是能够拥有空标记,例如:

ptr

由于field1||||field5 (和原始版)将strtok_s视为单个分隔符,我们必须找到其他方法||||: - )< / p>