【发布时间】:2011-04-12 04:01:12
【问题描述】:
我构建了一个如下所示的简单方法
wchar_t buf[1024] = {};
void logDebugInfo(wchar_t* fmt, ...)
{
va_list args;
va_start(args, fmt);
vswprintf( buf, sizeof(buf), fmt, args);
va_end(args);
}
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
logDebugInfo(L"test %s, %d..", L"integer", 10);
return (*env)->NewStringUTF(env, buf);
}
我收到以下警告
在函数“Java_com_example_hellojni_HelloJni_stringFromJNI”中:
警告:从不兼容的指针类型传递“logDebugInfo”的参数 1
注意:预期为 'wchar_t *' 但参数类型为 'unsigned int *'
结果字符串不正确。 如果我在格式化字符串之前删除了那个 L 前缀,奇怪的是,它起作用了。但是在我的遗留代码中到处都使用了 L 前缀。
首先,我知道 wchar_t 的可移植性不够,而且是非常特定于编译器的。我期望的 wchar_t 的大小应该是 16 位。我读了一些其他帖子说它是 32 位的 android 但是 wchar.h,由官方 NDK 提供,它说 wchar_t == char,真的吗?
【问题讨论】:
-
顺便说一句,我的目标是 android 1.6 及更高版本
-
检查这个 SO 问题:stackoverflow.com/questions/5008616/…
-
已经试过了,fshort-wchar 对我不起作用,不知道 :(
-
我使用sizeof在android上测试了wchar_t的大小,它是1...
标签: android c java-native-interface android-ndk