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