- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用下一个函数:
void CharTest(const char * format,...)
{
char buffer[1024];
va_list args;
va_start(args, format);
vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
fnt->Render(0, 30, 0, buffer);
for(int i=0; i<strlen(buffer); i++)
{
fnt->printf(0, 60 + i*30 , 0, "%d) - %d", i+1, (int)buffer[i]);
fnt->printf(200, 60 + i*30 , 0, "%d) - %c", i+1, buffer[i]);
}
}
测试示例:
CharTest("Russian. Русский");
在 Android 4.x 上它工作正常,但在 Android 5 上我遇到非英文字符的问题。
设备截图:
请帮我定位问题。
附注NDK,API 级别 10
编辑:
Dan Albert:你说得对!谢谢!:)
最佳答案
看起来您使用的是扩展 ASCII 而不是 UTF-8。 IIRC 支持各种 printf 函数的代码需要 UTF-8。
关于android - Android Lollipop 上的 va_start/va_end + vsnprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736114/
我有以下代码,并试图理解为什么 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
我是一名优秀的程序员,十分优秀!