规范在strtol
概念上将输入字符串分为“初始空白”、“主题序列”和“最终字符串”,并将“主题序列”定义为:
输入字符串的最长初始子序列,从第一个具有预期形式的非空白字符开始。如果输入字符串为空或完全由空白字符组成,或者如果第一个非空白字符不是符号或允许的字母或数字,则主题序列不应包含字符。
有一次我认为“最长的初始子序列”业务类似于工作方式scanf
,其中"0x@"
将扫描为"0x"
,一个失败的匹配,然后"@"
是下一个未读字符。但是,经过一些讨论,我主要相信strtol
处理的是预期形式的最长初始子序列,而不是最长的初始字符串,它是预期形式的某些可能字符串的初始子序列。
仍然让我感到困惑的是规范中的这种语言:
如果主题序列为空或没有预期的形式,则不进行转换;str 的值存储在 endptr 指向的对象中,前提是 endptr 不是空指针。
如果我们接受似乎是“主题序列”的正确定义,则不存在没有预期形式的非空主题序列之类的东西,相反(为了避免冗余和混淆)文本应该只是阅读:
如果主题序列为空,则不进行转换;str 的值存储在 endptr 指向的对象中,前提是 endptr 不是空指针。
谁能为我澄清这些问题?也许指向过去讨论或任何相关缺陷报告的链接会很有用。