我的程序在一台机器上运行不正常,所以我开始寻找bug,我发现在那台机器上,snprintf使用的是逗号(,),而不是。 (点)99%的其他计算机(至少根据我的经验)。
这不应该标准化吗?
我正在使用一个假设基数为a的库。 (点)所以它用逗号不能正常工作。
所以我的问题是,是否有一种简单的方法可以强制点作为基数字符?我知道我可以搜索和手动用点替换逗号,但肯定有一种更干净的方式。
答案 0 :(得分:6)
您应该可以使用setlocale
- 函数更改区域设置,以使snprintf使用点。尝试将其设置为“POSIX”或“C”。 (setlocale(LC_ALL, "POSIX")
答案 1 :(得分:5)
.
与,
由区域设置的LC_NUMERIC
部分设置。因此,请确保将程序设置为使用使用.
的区域设置(例如"POSIX"
)。
答案 2 :(得分:1)
对于库代码,您可能希望使用POSIX 2008 uselocale
函数而不是setlocale
。它能够设置特定于线程的语言环境,这样如果从使用线程的程序调用库代码,它就不会搞乱其他线程的行为(和/或使程序崩溃,因为{{1} }不是线程安全的。)
对于应用程序代码,您应该简单地避免将setlocale
语言环境类别设置为除C / POSIX之外的任何内容。您真正需要为大多数应用设置的唯一类别是LC_NUMERIC
,LC_CTYPE
,可能还有LC_MESSAGES
。