我建立了一个如下的简单方法
我收到了以下警告:
在函数“Java_com_example_hellojni_HelloJni_stringFromJNI”中: 警告:从不兼容的指针类型传递参数1给'logDebugInfo' 注意:期望的是'wchar_t *',但参数的类型是'unsigned int *'
并且生成的字符串不正确。如果我在格式化字符串之前删除了那个L前缀,奇怪的是它可以工作。但是在我的旧代码中,L前缀被广泛使用。
首先,我知道wchar_t在足够便携性和非常特定于编译器。我预期的wchar_t大小应该为16位。我读了一些其他帖子,说对于Android而言它是32位,但是由官方NDK提供的wchar.h说wchar_t == char,真的吗?
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”中: 警告:从不兼容的指针类型传递参数1给'logDebugInfo' 注意:期望的是'wchar_t *',但参数的类型是'unsigned int *'
并且生成的字符串不正确。如果我在格式化字符串之前删除了那个L前缀,奇怪的是它可以工作。但是在我的旧代码中,L前缀被广泛使用。
首先,我知道wchar_t在足够便携性和非常特定于编译器。我预期的wchar_t大小应该为16位。我读了一些其他帖子,说对于Android而言它是32位,但是由官方NDK提供的wchar.h说wchar_t == char,真的吗?