gpt4 book ai didi

找不到 strtok_s() 的文档

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:37 25 4
gpt4 key购买 nike

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

它到底比普通的 strtok 好多少?

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

最佳答案

这在 Appendix K (bounds checking interfaces) 中有详细说明的 ISO C11标准。该标准的这个可选部分提供了标准核心部分中提供的现有功能的“更安全”(a) 版本。

原型(prototype)是:

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 .
  • 找到的 token 结尾必须出现在第一个 *s1max 之内s1 的字符第一次通话
  • 找到的 token 结尾必须出现在第一个 *s1max 之内在后续调用中继续搜索的字符。

安全方面是,如果违反了这些约束中的任何一个,则不会在 s1 上发生间接寻址。或 s2并且没有值通过 ptr 存储.

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


(a) 被引用是因为如果您知道如何正确使用标准的大部分部分已经是安全的:-)


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

field1||||field5

因为 strtok_s (和原来的)对待||||作为单个 分隔符,我们必须找到其他方法来做到这一点</rant> :-)

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com