locale对strtol有什么影响?

时间:2017-08-13 05:48:45

标签: c locale string-parsing strtol

"The GNU C Library: Parsing of Integers"说,关于strtol

  

在标准" C"以外的语言环境中;在语言环境中,此函数可能会识别其他依赖于实现的语法。

Documentation on cppreference同意:

  

当前安装的C语言环境可以接受其他数字格式。

我模糊地意识到GNU扩展scanf("%'d", &intvalue)以及"选择"用千位分隔符解析整数;但我的印象是,上述引文指的是其他内容,特别是关于strtol(不是sscanf)的内容,以及不能选择"选择退出"除了将区域设置设置为"C"

什么"其他数字格式"是可能的,在什么地方?显然,理论上的可能性是无穷无尽的,所以我特意寻找一个存在于当前现实系统中的语言环境,和/或在某个有信誉的在线文档中记录。

1 个答案:

答案 0 :(得分:1)

glibc had a buginfamous Turkish locale fixed just recently有关。字母i未在strtol中正确处理,因为土耳其语区域设置下的大写版本为İ(U + 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE)。尽管这种行为并非如此,但它仍会影响数百万个真实世界的系统。

那就是说,我很确定没有主要的C库实现故意允许其他数字格式。原因很简单,它会导致严重的互操作性问题。