1

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

这不应该标准化吗?

我正在使用一个假设基数是 . (点),所以它不能与逗号一起正常工作。

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

4

3 回答 3

6

您应该能够使用setlocale-function 更改您的语言环境设置,以使 snprintf 使用点。尝试将其设置为“POSIX”或“C”。(setlocale(LC_ALL, "POSIX")

于 2010-08-11T12:09:39.207 回答
5

.vs,是由语言环境的LC_NUMERIC一部分设置的。因此,请确保您将程序设置为使用使用. (例如"POSIX")的语言环境。

于 2010-08-11T12:04:17.517 回答
1

对于库代码,您可能希望使用 POSIX 2008uselocale函数而不是setlocale. 它能够设置特定于线程的语言环境,因此如果您的库代码是从使用线程的程序调用的,它不会弄乱其他线程的行为(和/或使程序崩溃,因为setlocale不是线程-安全的)。

对于应用程序代码,您应该简单地避免将LC_NUMERIC语言环境类别设置为 C/POSIX 以外的任何内容。您真正需要为大多数应用程序设置的唯一类别是LC_CTYPE,LC_MESSAGES和可能LC_COLLATE

于 2010-08-11T12:47:48.787 回答