JNI 将 jstring 转换为 char *

我通过使用 JNI 将 URL 字符串作为 jstring数据类型从 Java 传递给 C 代码。我的库方法需要一个 char *作为 url。

How can I convert jstring in char * ?

P.S. : 在 C 语言中使用 jcharArray 有什么好处吗? (例如,在本机方法中传递 char []而不是字符串)

127671 次浏览

下面是我在开始使用 JNI 时发现的一些有用的链接

Http://en.wikipedia.org/wiki/java_native_interface
Http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

关于你的问题,你可以用这个

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = env->GetStringUTFChars(javaString, 0);


// use your string


env->ReleaseStringUTFChars(javaString, nativeString);
}

首先感谢 Jason Rogers 的回答。

仿生人 & & 心肺复苏术应该是这样的:

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);


// use your string


env->ReleaseStringUTFChars(javaString, nativeString);

Can fix this errors:

错误:’->’的基本操作数具有非指针类型‘ JNIEnv { aka _ JNIEnv }’

2. error: 没有调用’_ JNIEnv: : GetStringUTFChars (JNIEnv * & ,_ jstring * & ,bool)’的匹配函数

3. error: 没有调用’_ JNIEnv: : ReleaseStringUTFChars (JNIEnv * & ,_ jstring * & ,char const * &)’的匹配函数

4.add "env->DeleteLocalRef(nativeString);" at end.