gpt4 book ai didi

C vsnprintf() 忽略最后一个参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:19 25 4
gpt4 key购买 nike

我正在尝试使用 TI C2000 微 Controller 在 TFT 显示器上显示格式化字符串。为了实现这一点,我使用了以下函数。

void text_writeFormatAtPoint(fontHeader_t font, uint16_t x, uint16_t y, textAlignment_t align, char *fmt, ...) {
va_list lst;
char s[64];
va_start(lst, fmt);
vsnprintf(s, 63, fmt, lst);
va_end(lst);
text_writeTextAtPoint(font, s, x, y, align);
}

我用下面一行调用函数。

text_writeFormatAtPoint(f_12x16, 0, clock->face.y+30, CENTER, "%2d:%02d:%02d", hours, mins, secs);

在不同的微 Controller 上,这完全符合预期。然而,在这个字符串中,只有小时和分钟被放入字符串中,而秒的位置仍然是 00。通过调试,我已确保 secs 变量拥有正确的值,并且 s 不正确,而不是显示代码。我忽略了 vsnprintf() 的某些功能,还是可能是 TI 实现该功能的错误?

如果我执行以下操作

text_writeFormatAtPoint(f_12x16, 0, clock->face.y+30, CENTER, "%2d:%02d:%02d:%02d", hours, mins, secs, secs);

最右边的地方更新,但不是正常的地方。

最佳答案

问题是 secs 被声明为 uint32_thoursmins 被声明为 uint16_t,因此格式说明符必须改为 %02ld。 (我很惊讶这会产生如此重大的影响)

关于C vsnprintf() 忽略最后一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com