gtk_init更改sprintf功能

时间:2018-10-01 12:54:10

标签: c gtk3

我开始使用Linux和GTK,但遇到了一个奇怪的问题。 我在代码中使用sprintf()将float解析为char数组。

将数字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 :(得分:7)

这与您的语言环境/语言环境有关。在调用gtk_init之前,必须将LOCALE变量设置为默认值C。默认情况下,gtk_init会将语言环境设置为您的桌面环境设置的任何值。

要关闭此行为,可以使用gtk_disable_setlocale