swprintf()不能在Android Kitkat及以下版本上运行吗?

时间:2018-04-10 11:18:12

标签: android c android-ndk wchar-t

大多数时候我在Android上使用UTF-8,但我最近也在测试wchar_t。 我知道wchar_t在早期是可怕的,但我不在乎太旧的设备,所以认为现在与wchar_t合作会很好。

经过测试:

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

软件模拟器:HTC One(4.3),Samsung 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及以下版本上运行。它可能只是无所事事。

请问有人证实我的理论吗?有没有解决方法呢?

无论是否实用,我只是想知道。

1 个答案:

答案 0 :(得分:2)

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

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

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