gpt4 book ai didi

C:将数字转换为无区域设置的字符串的可移植/安全(线程感知)方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:02:56 27 4
gpt4 key购买 nike

将数字转换为字符串(以及相反的方式)的安全/便携方法是什么?

我在 Linux 上,我的设置语言环境是这样的,当我使用 sprintf 时,数字有一个“,”而不是“。”作为分隔符。

有时我想要他们那样,有时不是:)

我看到一些暗示玩弄用户设置的解决方案。显然,这是不应该做的事情。有人建议使用 uselocale

snprintf : simple way to force . as radix?

有人可以详细说明一下吗(看起来它在某些 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;
}

最佳答案

对于 POSIX 2008,您可以使用 newlocaleuselocale在不影响其他线程的情况下临时更改当前线程中的语言环境的函数。这确实是唯一的解决方案,除了从不设置 LC_NUMERIC语言环境类别开始。另一方面,我更喜欢禁止使用 LC_NUMERIC在我编写的软件中,至少对于全局语言环境。然后你可以使用newlocaleuselocale在您希望数字格式与用户的文化习俗相匹配的地方,以及在缺少 POSIX 2008 的系统上本地 uselocale , 只需省略本地化数字打印即可。

关于C:将数字转换为无区域设置的字符串的可移植/安全(线程感知)方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com