gtk_init更改了sprintf功能

Roe*_*ink 4 c gtk3

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

当将数字1解析为字符串时,这导致"1.000000",但奇怪的是,当我执行sprintf时调用gtk_init()后,它会产生"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;
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出如下:

T:1.000000
T:1,000000
Run Code Online (Sandbox Code Playgroud)

waz*_*oox 7

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

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