- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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_t
而 hours
和 mins
被声明为 uint16_t
,因此格式说明符必须改为 %02ld
。 (我很惊讶这会产生如此重大的影响)
关于C vsnprintf() 忽略最后一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957449/
我有以下代码,并试图理解为什么 vsnprintf 会导致格式字符串漏洞。 如果我执行如下程序“./test %llx”,这个漏洞是否是因为“%llx”被传入va_list,然后被vsprintf解释
我正在尝试使用 TI C2000 微 Controller 在 TFT 显示器上显示格式化字符串。为了实现这一点,我使用了以下函数。 void text_writeFormatAtPoint(font
是否可以使用 vsnprintf 从数组中的确切值开始打印?例如,我想使用 vsnprintf 从数组中的第 25 个字符开始打印。我可以只输入这段代码吗? va_list args; #define
我有以下功能: void printerror(char *fmt, ...) { char string[256]; va_list str; va_start(str, f
带有 myPrint() 函数的超长字符串将会崩溃。 我认为 vsnprintf() 无法从 linux 手册页返回超过缓冲区长度的写入大小。 我预期的字符串是缓冲区大小的截断字符串,但这在下面的测试
我正在将一些非常古老(> 10y)的 C 代码移植到现代 Linux。我在自定义编写的 vsnprintf() 包装器中遇到了段错误(显然它的任务是检测重复的输出字符串并保留它们): char* st
我正在编写需要格式化字符串的代码,我想避免缓冲区溢出。 我知道如果 vsnprintf 可用(从 C99 开始)我们可以: char* formatString(const char *format,
我正在尝试编写一个宏来简化 LOG4CPLUS 的使用。但是我在写宏的时候遇到了一些麻烦。 这是我的 cpp 文件中的内容: Logger logger = Logger::getInstance("
我在 ubuntu 12.04 上,使用 uname -a:Linux lu057801 3.2.0-31-generic#50-Ubuntu SMP Fri Sep 7 16:16:45 UTC 2
在实现一个简单的 printf 样式记录器时,我遇到了 vsnprintf 崩溃。这就是我调用记录器实用程序的方式: LoggerUtil->LogInfo("Whatever info here %
以下代码将在 Visual Studio 2012 上给出预期结果,但在 XCode 5.0 上不会。我想念什么? static std::string format(const std::strin
我正在重写一些代码以与 32 位和 64 位架构兼容,但我在调用 vsnprintf 时遇到了问题。 vsnprintf 似乎没有在任一架构上正确处理来自 inttypes.h 的固定大小整数类型。
我有以下声明: vsnprintf(target, size - 1, "%ls_%ls", str16_1, str16_2); 为什么这在 gcc 上失败了? 我在 Windows 上是这样使用的
我目前正在将 C 头文件翻译成 delphi。 delphi中有没有函数可以代替C语言的vsnprintf?或者它是否存在于任何常见的 DLL 中? int vsnprintf(char *str,
vsnprintf() 能否返回一个大于 1 的负值?如果是,它是在什么情况下这样做的? 我尝试使用 %ls 作为 char 数组的格式说明符,还尝试复制大于分配的数组。在这两种情况下,我都得到 -1
我有一个大小为 N 的 char 数组,我需要在不同部分获取 vsnprintf 输出,以防其长度超过 char 数组大小减去 1(N-1 字节)。 我想实现类似 printf 的东西,但通过 UAR
我看过这个question以及这些 PDF 的 1和 2 , 这个page并且非常了解如果我这样做会发生什么 printf(SOME_TEST_STRING)。但我不明白的是,与 vsprintf 相
我有以下功能: void raiseError(const char *msg, ...) { va_list ap; va_start(ap, msg); // use variab
vsnprintf 的预期行为是什么?当它有一个输入 NULL 字符串和/或 size=0 时,例如 vsnprintf(NULL, 0, "%d", p); 或者 vsnprintf(NULL, 1
我的代码如下: #include #include #include int test(const char *fmt, ...); int main(void) { int i
我是一名优秀的程序员,十分优秀!