【发布时间】:2020-07-08 12:09:59
【问题描述】:
strtok_s 函数 (C11) 解决的两个问题之一是它防止存储在输入字符串之外。据我了解,只有将非空终止字符串传递给strtok,这才有可能。
如果我只将正确的以空结尾的字符串传递给strtok,那么它是否没有写入输入字符串之外的风险?
【问题讨论】:
-
如果不是这样,该函数将不会包含在 C 标准中。
-
"...在外面写的风险..." 你的意思是问外面的阅读吗?
strtok根本不进行任何写入,即使在输入字符串中也是如此。 -
@ArthurTacca 你错了。该函数更改输入字符串。
-
@VladfromMoscow 哎呀你是对的,我错了。很抱歉造成混乱。
-
请在使用任何可选的附件 K 函数之前阅读Field Experience With Annex K — Bounds Checking Interfaces,因为它们并不能真正使您的代码更安全。请特别注意这部分:“由于与规范存在大量偏差,因此不能将 Microsoft 实现视为符合标准或可移植。”