我开始使用Linux和GTK,并遇到了一个奇怪的问题。我在代码中使用sprintf()将float解析为char数组。
当解析数字1成字符串时,结果为"1.000000",但是,在调用gtk_init()后再次使用sprintf()时,结果为"1,000000"。gtk_init()如何修改此行为,如何强制程序继续解析为"1.000000"。
这是可以重现问题的小示例程序:
该程序的输出如下所示:
当解析数字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
setlocale(LC_ALL, "en_US.UTF-8");
,是否有帮助? - Blazechar cMessage[12]
很容易出现意外。如果格式化字符串的长度稍微超过你的预期,那么这个缓冲区就会非常有限。我建议使用 (a)char cMessage[30]
,或者更好的方法是snprintf(cMessage, sizeof(cMessage), "T:%f", fNumber);
。 - Steve Summit