Почему Qt меняет поведение sscanf ()?

Я заметил, что Qt (4.8) меняет поведениеsscanf(), Без Qtsscanf() работает как обычно, но с, он принимает только локализованные строки.

Вот минимизированный пример:

Без Qt (простой C ++)
int main(int argc, char *argv[])
{
    float f;
    sscanf("0.83", "%f", &f);

    std::cout << f << "\t-->\t" << typeid("0.83").name() << std::endl;

    return 0;
}

Выход:

0.83    -->     A5_c

(данная строка 5xcharМассив, результат правильный)

С Qt
int main(int argc, char *argv[])
{
    /*
     * This breaks sscanf() for the whole (!) project
     * and linked libraries too!
     */
    QApplication(argc, argv);

    float f;
    sscanf("0.83", "%f", &f);

    std::cout << f << "\t-->\t" << typeid("0.83").name() << std::endl;

    return 0;
}

Выход:

0       -->     A5_c

(Заданная строка все еще 5xchar- массив, но результат неверный)

Пока0.83 не удается, используя0,83 (мой формат локали) отлично работает с Qt - но не работает без Qt (поведение по умолчанию). Как показаноtypeid(), нет никакихQString Используется - только старые символы C (++). Кстати, то же самое происходит сstd::string.

Кроме того, используяstd::stringstream продолжает работать как обычно:

std::stringstream ss;
ss << "0.83"; // But the value into the stream
ss >> f;      // Get a float out of it

Результат:

0.83

И тут возникает вопрос: Почему строки массива char иsscanf() звонки, затронутые Qt? Я понимаю почемуQStringлокализованы, но ломаютсяsscanf() (и, возможно, другиеstdio.h функции) звучит зло для меня.

Фон: Я связал (не Qt) библиотеку, содержащуюsscanf() где-то глубоко в коде, к проекту Qt. Результат: в этом проекте произошел сбой некоторого кода, хотя он работал везде… (потребовалось некоторое время, чтобы найти причину…)

Ответы на вопрос(3)

Ваш ответ на вопрос