C: Какой переносимый / безопасный (с учетом потоков) способ преобразования числа в строку без настроек локали?

Каков безопасный / переносимый способ преобразовать число в строку (и наоборот)?

Я использую Linux, и мои настройки таковы, что когда я использую числа sprintf иметь "," вместо "." в качестве разделителя.

Иногда я хочу, чтобы они были такими, Иногда нет :)

Я видел некоторые решения, которые подразумевают игру с пользовательскими настройками. Ясно, что этого делать не следует. Кто-то предложил использовать uselocale

snprintf: простой способ заставить. как основание системы счисления?

может кто-нибудь немного уточнить (похоже, что он глючит на некоторых glibc (

Я пробовал себя, но мои навыки Си очень ограничены.

[править]

Я нашел этот код [GO] Skywalker13 на Swisslinux.org после того, как написал свой вопрос. Есть мысли по этому поводу? А как насчет использования памяти? (Мне нужно сделать множество вызовов этой функции)

#define _GNU_SOURCE
#include 
#include 

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;
} 

5
задан Community 23 May 2017 в 12:07
поделиться