Por que o Qt altera o comportamento do sscanf ()?

Eu notei, o Qt (4.8) muda o comportamento dosscanf(). Sem Qtsscanf() funciona como de costume, mas com, leva apenas seqüências localizadas.

Aqui está um exemplo minimizado:

Sem Qt (simples 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;
}

Saída:

0.83    -->     A5_c

(dado string é um 5xchar-array, resultado correto)

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

Saída:

0       -->     A5_c

(Dado string ainda um 5xchar-array, mas o resultado está errado)

Enquanto0.83&nbsp;falha, usando0,83&nbsp;(meu formato local) funciona bem com Qt - mas falha sem Qt (comportamento padrão). Como mostrado portypeid(), não háQString&nbsp;Usado - somente arrays char C (++) simples. Btw., Mesmo acontece comstd::string.

Além disso, usando umstd::stringstream&nbsp;continua funcionando normalmente:

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

Resultado:

0.83

E aí vem a pergunta:&nbsp;Por que as strings de matriz de caracteres esscanf()&nbsp;chamadas afetadas por Qt? Eu entendo porqueQStringestão localizados, mas quebrandosscanf()&nbsp;(e potencialmente outrosstdio.h&nbsp;funções) soa mal para mim.

Fundo:&nbsp;Eu vinculei uma biblioteca (não-Qt), contendo umsscanf()&nbsp;em algum lugar no fundo do código, para um projeto Qt. Resultado: algum código falhou neste projeto, enquanto funcionou em qualquer outro lugar… (demorou um pouco para encontrar a causa…)