将数字转换为字符串的安全/可移植方式是什么(反之亦然)?
我在Linux上,我的设置区域设置是这样的,当我使用sprintf时,数字有","而不是"." 作为分隔符.
有时我想要那样,有时候不是:)
我看到了一些暗示玩用户设置的解决方案.显然,这是不应该做的事情.有人建议使用uselocale
可以有人详细说明(看起来它在一些glibc(<2.12)上有问题)并且如果可能的话提供一些示例代码(例如宏SNPRINTF_POSIX).
我试过自己,但我的C技能非常有限.
[编辑]
在写完我的问题后,我在Swisslinux.org上找到了[GO] Skywalker13的代码.有什么想法吗?内存使用情况怎么样?(我需要多次调用此函数)
#define _GNU_SOURCE
#include <locale.h>
#include <stdlib.h>
double
my_atof (const char *nptr)
{
double res;
locale_t new_locale;
new_locale = newlocale (LC_NUMERIC_MASK, "C", NULL);
res = strtod_l (nptr, NULL, new_locale);
freelocale (new_locale);
return res;
}
Run Code Online (Sandbox Code Playgroud)
使用POSIX 2008,您可以使用newlocale和uselocale函数临时更改当前线程中的区域设置,而不会影响其他线程.这是唯一的解决方案,除了从未设置LC_NUMERIC区域设置类别.另一方面,我更喜欢禁止LC_NUMERIC在我写的软件中使用,至少对于全局语言环境.然后你可以使用newlocale和uselocale在要符合用户的文化习惯数字格式的本地点,以及缺少POSIX 2008系统uselocale,只是离开了本地化的数字印刷.