【发布时间】:2022-01-30 18:31:54
【问题描述】:
我现在正在使用 C++ 使用 PROS 对机器人进行编程。 Pros 有一个打印功能,它接收一个 const char*。现在,我正在使用 lvgl 创建自己的屏幕,并且我想复制打印功能。与printf() 函数一样,我希望它包含可变参数以执行%d 效果(因此它将所有%? 转换为相应的值)。现在的问题是关于函数之间的转换。我想制作一个转换函数来将字符串和可变参数转换为完整的字符串。我需要输入的是一个类似于“嘿”的字符串,我不确定类型名称应该是什么。我需要能够获取大小,在其中搜索 %ds 但我需要该函数返回一个 const char* 以传递到 lvgl 以在屏幕上显示。我在尝试将字符串转换为 const char* 以输出转换函数时遇到了麻烦。
另外,我尝试将输入类型用作 char*,当我输入像“hello”这样的字符串时,会出现错误 [ISO C++11 不允许从字符串文字转换为 'char ' [-Writable-strings]]。但是,当使用 const char 时,错误就会消失。有人知道为什么吗?
感谢大家的热心帮助!
【问题讨论】:
-
我建议您研究
printf和vsprintf等函数的源代码,以了解它们的工作原理。 -
这里是打印功能:code.woboq.org/userspace/glibc/stdio-common/printf.c.html 它们看起来很简单,我什至没有看到处理“%d”的部分。
-
@EdenCheung 在
__vfprintf_internal内处理。你可以在这里看到它:github.com/lattera/glibc/blob/master/stdio-common/vfprintf.c这并不容易。 -
我找不到_vfprintf_internal...你解释一下它的逻辑吗?非常感谢
标签: c++