snprintf:简单的强制方式。作为基数?

时间:2010-08-11 11:59:07

标签: c printf radix

我的程序在一台机器上运行不正常,所以我开始寻找bug,我发现在那台机器上,snprintf使用的是逗号(,),而不是。 (点)99%的其他计算机(至少根据我的经验)。

这不应该标准化吗?

我正在使用一个假设基数为a的库。 (点)所以它用逗号不能正常工作。

所以我的问题是,是否有一种简单的方法可以强制点作为基数字符?我知道我可以搜索和手动用点替换逗号,但肯定有一种更干净的方式。

3 个答案:

答案 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_NUMERICLC_CTYPE,可能还有LC_MESSAGES