Почему sscanf использует запятую вместо точки при использовании русской локали в linux?
Есть у нас разработчик, который программирует в Visual Studio, используя C++ с QT. Его программы должны работать как под Windows, так и под Linux. К сожалению от Linux он далек.
Есть я, тот кто собирает этому человеку его программы под Linux. Я неплохо разбираюсь в нем, но далек от программирования.
И есть у нас следующая проблема:
Есть исходные данные вида
line=«EXPTIME = 0.5212 / actual integration time (sec) „
приходящие извне.
Под windows код
sscanf(line, “%*10c %le», &expTime)
выцепляет дробное число нормально.
Под Linux с любой включенной русской локалью (ru_RU.UTF-8, ru_RU.KOI8-R) за дробный разделитель считается запятая и поэтому в нашем случае считывается только целая часть.
Если ставлю LANG=C, то все работает нормально.
Как нам быть и что делать? Хотелось бы без костылей. Так как, выставляя LANG=C перед запуском его программы, мы ломаем вывод кириллицы.
P.S. Давайте постараемся обойтись без холиваров, пожалуйста, мне итак уже все уши прожжужали какой неправильный этот linux и как в нем все не так как в VS работает.
Очень осторожно пишите программы, работа которых может зависеть от установленной локали, встречал людей, которые меняют параметры локали в windows очень причудливым образом.
Везде, где возможна подобная неоднозначность принудительно прописывать параметры локали (как в windows так и в linux).