gtk_init меняет функциональность sprintf - PullRequest
0 голосов
/ 01 октября 2018

Я начинаю работать с Linux и GTK и столкнулся со странной проблемой.Я использую sprintf () в своем коде, чтобы разобрать float в массив символов.

При анализе числа 1 в строке это привело к «1.000000», но странным образом после вызова gtk_init (), когда я затем выполняю sprintf, это приводит к «1,000000».Как gtk_init () изменяет это поведение и как заставить программу продолжать анализировать его на «1.000000».

Это мой небольшой пример программы, которая воспроизводит проблему:

#include <gtk/gtk.h>

int main(int argc, char** argv)
{
    char cMessage[12];
    float fNumber = 1;
    sprintf(cMessage, "T:%f", fNumber);
    printf("%s\n", cMessage);

    gtk_init(&argc, &argv);

    sprintf(cMessage, "T:%f", fNumber);
    printf("%s\n", cMessage);

    return 0;
}

Вывод этой программы следующий:

T:1.000000
T:1,000000

1 Ответ

0 голосов
/ 01 октября 2018

Это связано с вашей локалью / языковой средой.Перед вызовом gtk_init переменная LOCALE должна установить значение по умолчанию, по умолчанию C. gtk_init устанавливает для языкового стандарта любое рабочее окружение.

Чтобы отключить это поведение, вы можете использовать gtk_disable_setlocale .

...