【问题标题】:swprintf() doesn't work on Android Kitkat and below?swprintf() 不适用于 Android Kitkat 及以下版本?
【发布时间】:2018-04-10 11:18:11
【问题描述】:

大部分时间我在 Android 上使用 UTF-8,但我最近也在测试 wchar_t。 我知道 wchar_t 在早期很糟糕,但我不关心太旧的设备,所以认为现在使用 wchar_t 会很好。

测试日期:

物理设备:三星 Galaxy Note2 (4.4.2)、Galaxy S7 Edge (7.0)

软件模拟器:HTC One (4.3)、三星 Galaxy S6 (5.0、6.0)、S8 (7.0)、Google Pixel C (7.1.0)

在我的简单测试中,wcslen()wcscpy()wcscat() 按预期工作, 但是swprintf()HTC One (4.3) 和 Note2(4.4.2) 上什么也没做。 我无法测试所有设备,但我的结论是swprintf() 无法在 Android Kitkat 及以下版本上运行。它可能只是返回什么都不做。

有人可以证实我的理论吗?有什么解决方法吗?

实用与否,我只想知道。

【问题讨论】:

标签: android c android-ndk wchar-t


【解决方案1】:

不要问我为什么,直到 L Android 只有一个 vswprintf 的存根实现,它只返回 -1。

https://android.googlesource.com/platform/bionic/+/kitkat-release/libc/bionic/wchar.cpp#74

解决方法是使用 libandroid_support。如果您使用的是 libc++,这是自动的(这是 NDK r16+ 的最佳选择)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多