"The GNU C Library: Parsing of Integers"说,关于strtol
:
在标准" C"以外的语言环境中;在语言环境中,此函数可能会识别其他依赖于实现的语法。
Documentation on cppreference同意:
当前安装的C语言环境可以接受其他数字格式。
我模糊地意识到GNU扩展scanf("%'d", &intvalue)
以及"选择"用千位分隔符解析整数;但我的印象是,上述引文指的是其他内容,特别是关于strtol
(不是sscanf
)的内容,以及不能选择"选择退出"除了将区域设置设置为"C"
。
什么"其他数字格式"是可能的,在什么地方?显然,理论上的可能性是无穷无尽的,所以我特意寻找一个存在于当前现实系统中的语言环境,和/或在某个有信誉的在线文档中记录。
答案 0 :(得分:1)
glibc had a bug与infamous Turkish locale fixed just recently有关。字母i
未在strtol
中正确处理,因为土耳其语区域设置下的大写版本为İ
(U + 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE)。尽管这种行为并非如此,但它仍会影响数百万个真实世界的系统。
那就是说,我很确定没有主要的C库实现故意允许其他数字格式。原因很简单,它会导致严重的互操作性问题。