我试图学习C并已经遇到了问题。 我认为它微不足道,但我需要知道它。我已经写:警告:格式不是字符串文字,参数类型没有检查
char *seconds_to_string (guint seconds)
{
long days, hours, minutes;
char *time = NULL;
const char *minutefmt;
const char *hourfmt;
const char *secondfmt;
days = seconds/(60 * 60 * 24);
hours = (seconds/(60 * 60));
minutes = (seconds/60) - ((days * 24 * 60) + (hours * 60));
seconds = seconds % 60;
minutefmt = ngettext ("%ld minute", "%ld minutes", minutes);
hourfmt = ngettext ("%ld hour", "%ld hours", hours);
secondfmt = ngettext ("%ld second", "%ld seconds", seconds);
minutefmt = ngettext ("%ld minute", "%ld minutes", minutes);
hourfmt = ngettext ("%ld hour", "%ld hours", hours);
secondfmt = ngettext ("%ld second", "%ld seconds", seconds);
char *fmt;
/* Translators: the format is "X hours X minutes X seconds" */
fmt = g_strdup_printf (_("%s %s %s"), hourfmt, minutefmt, secondfmt);
time = g_strdup_printf (fmt, hours, minutes, seconds);
g_free (fmt);
---------------------------------------------------------------------
return time;
}
警告符合:
time = g_strdup_printf (fmt, hours, minutes, seconds);
谁能帮助吗?
UPDATE:
编译
scan-build make CFLAGS='-Wformat-nonliteral'
你能告诉我们'g_strdup_printf'的原型吗?这听起来像你的参数不适合原型类型。 – dhein
通过以相反的顺序执行操作,您可以避免发出警告:首先将小时,分钟和秒值分别格式化为其自己的字符串,然后将这些字符串与_(“%s%s%s”)一起格式化。 – ptomato