atof, strtod и локаль.
Внезапно: а вот как положено в коде на С конвертить строку в double, если мы точно знаем, что в строке десятичный разделитель ".", и точно знаем, что код будут запускать на системе с адовыми локалями, у которых разделитель "," типа русской, белорусской итд?
В дотнете, как положено, есть функция с параметром для локали и инвариантная локаль InvariantCulture.
А в олдскульно-кошерном C как?
setlocale(LC_NUMERIC,"C"); чо-то не рекомендуют, говорят, не thread-safe.
no subject
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(Anonymous) 2012-01-22 07:46 pm (UTC)(link)--
xaep
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(Anonymous) - 2012-01-22 20:31 (UTC) - Expandno subject
(no subject)
(no subject)
no subject
2) Мнение, что разделителем можэт быть запятая -- это ересь, посему setlocale(LC_NUMERIC, "C")
3) char *dot;
if ((dot = strchr(s, '.'))) {
*dot = *nl_langinfo(RADIXCHAR);
}
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
no subject
no subject
no subject
no subject
Соответственно, решение может быть такое:
а) не указывать локаль, а в си само не подхватится.
б) указать явно какую-нибудь адекватную в самом начале программы.
no subject
Синглтон, фигле.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)